How to Click on Text link inside TextView

uiautomator
appium
Теги: #<Tag:0x00007fedc45c24e8> #<Tag:0x00007fedc45c2380>

(Ilya G) #1

кто нибудь может подсказат как можно кликнуть на ссылку внутри ТехView. перепробал кучу всего и пока ничего не работает.

Text = "Want even more coverage? Enjoy a worry free experience with Service Protection. Call 866.580.1284 today and you’ll experience priority support and even get your service call fees waived. For more information visit optimum.net/service."
resource-id = “com.optimum.rdvr.mobile:id/description”
class = “TextView”

надо кликнуть на optimum.net/service.

я делал так:

driver.findElement(By.xpath("//TextView[contains(text(),'optimum.net/service')]")).click()

Link for UiAutomatorviwer: https://drive.google.com/open?id=0B4jaTiqZ4jQIbWljaXpNcXUyUkk


(Oleg Kuzovkov) #2

А тут случайно не ошибка в ХПасе?

driver.findElement(By.xpath("//android.widget.Button[contains(

@text

,‘optimum.net/service’)]")).click

Разве у эелемента есть атрибут text?

Может должно быть так? driver.findElement(By.xpath("//android.widget.Button[contains(text(),‘optimum.net/service’)]")).click


(Eugene Moskalenko) #3

я вот так ищу, для веба:

//div[contains(text(),"текст внутри элемента")]

для мобильного приложения, попробуйте так:

driver.findElement(By.xpath("//TextView[@text='optimum.net/service']")).click;

но чето мне кажется, что у вас там не так хвататьcя надо за элемент, можно скриншот этого блока + дерева элементов?


(Ilya G) #4

Uploaded link for tree(скриншот этого блока + дерева элементов). исправил xpath, дело в том что он находит весь блок элемента, а мне надо внутри него ссылку click only
driver.findElement(By.xpath("//TextView[contains(text(),‘optimum.net/service’)]")).click()
Rabotaet, no tol’ko klikaet na TextView element


(Eugene Moskalenko) #5

задачку понял, блин жаль девайс не захватил сегодня с собой домой, сейчас подумаю…

на ум приходить что-то такое:

driver.findElement(By.id("com.optimum.rdvr.mobile:id/description")).findElement(
                    By.linkText("optimum.net/service"));

// или

driver.findElement(By.linkText("optimum.net/service"));

By.linkText - желательно никогда не юзать (или юзать в крайних случаях), потому что у текста есть свойство перелазить на другую строку или меняться, тест получается не стабильным. Но тут мобайл, наверное данная проблема тут не столь актуальна…


(Ilya G) #6

Я не думаю для Appium есть такая комманда By.linkText он мне выдал:
org.openqa.selenium.UnsupportedCommandException: Invalid locator strategy: link text

На WEB там все проще конечно


(Eugene Moskalenko) #7
driver.findElement(By.xpath("//TextView[text()='optimum.net/service.']")).click;

driver.findElement(By.xpath("//android.widget.TextView[text()='optimum.net/service.']")).click;

а там точка тоже является ссылкой? Надо сейчас попробовать поднять на эмуляторе с подобным текстом и линком, интересно, никогда еще не сталкивался с таким.

Когда-то тапал по линку названия страны и там была часть текста, к примеру +38(05) Ukraine, тапал вот так:

driver.findElement(By.xpath("//TextView[text()='Ukraine']")).click;

(Ilya G) #8

дело в том если я использую driver.findElement(By.xpath("//TextView[text()='optimum.net/service.’]")).click;
Он clicks на середину элемента по XPATH driver.findElement(By.xpath("//TextView[text()='optimum.net/service.’]").
и этот xpath рабочий. а мне на техт внутри него надо. если техт маленький то проблем нет, а у меня техт на 5 строк и ссылка в конце только


(Oleg Kuzovkov) #9

А что то типа driver.findElement(By.xpath("//TextView[text()='optimum.net/service.’]/*")).click ?


(Ilya G) #10

driver.findElement(By.xpath("//TextView[text()='optimum.net/service.’]/*")).click
takaya ne poidet, on je ne videt element po etomy xpath.
driver.findElement(By.xpath("//TextView[contains(text(),‘optimum.net/service’)]")).click() absolutno rabochii tolko on clickaet na element po etomy xpath( v centr ego). a y mena element v 5 strochek. i link v samom konce


(Oleg Kuzovkov) #11

driver.findElement(By.xpath("//TextView[contains(text(),‘optimum.net/service’)]/*")).click() a tak? :slight_smile: Идея что бы прошагать вниз по ХПАСУ…


(Ilya G) #12

poprobal, no ne raboat.Tam nekyda shagat po xpath dalshe. Eto dla WEB smojet srabotat, na Appium takoi sintaksys xpath ne videl eshe.


(Ilya G) #13

I ves web obyskal uje. 2 ludei sprashivali pro takoe je, no otvetov tak i ne bylo


(Aleksey Ilyenko) #14

Если у Вас нет элемента внутри TextView, то, боюсь, нужно использовать координаты. Пробуйте кликнуть в нижнюю левую часть элемента.

WebElement element = driver.findElement(MobileBy.AndroidUIAutomator("textContains(\"optimum.net/service\")"));
Point point = element.getLocation();
int x = point.x + 1;
int y = point.y + element.getSize().getHeight() - 1;
new TouchAction(driver).tap(x, y).perform();

Это решение не универсально. Необходимо будет продумывать разные варианты для разных размеров экрана, поскольку этот линк может быть не только в левом нижнем углу.


(Ilya G) #15

aleksey_ilyenko,
Da, ty prav. Na raznyx devisax v raznyx mestax etot link, poetomy I dumal chto to yniversalnoe naiti - chto b ne podgonat pod vse devasy. I dymal chto to vrode kak na WEB mojno bylo naiti xpath of text vnutri xpath. Navernoe pridetsa delat HARD WAY ((.


(Aleksey Ilyenko) #16

Возможно, имеет смысл попросить у разработчиков добавить отдельный элемент на линк?