Не удается найти элемент с помощью XPATH с помощью Appium / Python - PullRequest
0 голосов
/ 05 декабря 2018

Я автоматизирую поток, который заключается в нажатии на Название продукта из Списка продуктов, который представляет собой Xamarin ListView для перехода на страницу сведений о продукте.

Я установил в своем ListView:

AutomationProperties.IsInAccessibleTree="false"

И в ярлыке с названием продукта:

AutomationId="ProductName"

Самое смешное, что при использовании инструмента проверки Appium Desktop UI я вижу XPATH, и если я записываю его, он действительно работает иЯ получаю этот скрипт:

MobileElement el1 = (MobileElement) driver.findElementByXPath("(//XCUIElementTypeStaticText[@name=\"ProductName\"])[1]");
el1.click();

Для этого я знаю, что XPATH существует и видим для Appium.Это работает в инструменте проверки.

Теперь, когда я перевожу это на Python, что-то идет не так:

el1 = self.driver.find_element_by_xpath("(//XCUIElementTypeStaticText[@name=\"ProductName\"])[1]")

Я получаю это сообщение об ошибке:

el = self.driver.find_element_by_xpath (element_query) Файл "/usr/local/lib/python3.7/site-packages/selenium/webdriver/remote/webdriver.py", строка 393, в find_element_by_xpath возвращает self.find_elementP (by = By., значение = xpath) Файл "/usr/local/lib/python3.7/site-packages/selenium/webdriver/remote/webdriver.py", строка 966, в find_element 'value': value}) ['value']Файл "/usr/local/lib/python3.7/site-packages/selenium/webdriver/remote/webdriver.py", строка 320, в файле execute self.error_handler.check_response (response) для ответов "/ Users / joseclua / Library /Python / 3.7 / lib / python / site-packages / appium / webdriver / errorhandler.py ", строка 29, в файле check_response поднять файл wde" /Users/joseclua/Library/Python/3.7/lib/python/site-packages/appium/webdriver/errorhandler.py ", строка 24, в check_response super (MobileErrorHandler, self) .check_response (response)Файл "/usr/local/lib/python3.7/site-packages/selenium/webdriver/remote/errorhandler.py", строка 242, в check_response поднять exception_class (message, screen, stacktrace) selenium.common.exceptions.NoSuchElementException:Сообщение. Не удалось найти элемент на странице с использованием заданных параметров поиска.

Ответы [ 4 ]

0 голосов
/ 04 января 2019

В целом, я бы посоветовал безопаснее проверить видимость элемента перед тем, как нажать на элемент.Как то так:

    elem_to_find = WebDriverWait(
        driver, 5).until(
            EC.visibility_of_element_located(
                ('xpath or id or class of the element, considering xpath in this case', MobileBy.XPATH)))
    elem_to_find.click()
0 голосов
/ 05 декабря 2018

Благодаря проницательности Suban я смог нажать на элемент списка, а также избежать XPath, который не рекомендуется.

Это код, который я сейчас работаю на iOS.Мне все еще нужно проверить в Android.

def list_item_tap(self, el_name):
    print("list_item_tap {0}", el_name)
    li = self.driver.find_elements_by_accessibility_id(el_name)
    print("list items: {0}", len(li))
    if len(li) > 0:
        el = li[0]
        time.sleep(2)
        el.click()

Кажется, что щелчок не работает без сна.

Спасибо, Субан

0 голосов
/ 10 декабря 2018

Вы можете использовать другие методы для поиска элементов, такие как id, UIAutomator, имя класса и т. Д.

для использования идентификатора * driver.findElementById (" id "). Click ();

для использования UIAumator driver.findElementByAndroidUIAutomator ("text (\" Text \ ")"). Click ();

для использования Classname driver.findElementByClassName (" Имя класса "). Click ();

Надеюсь, это поможет.

0 голосов
/ 05 декабря 2018

Использование Xpath не рекомендуется в appium

Вы можете использовать cont-desc, id, resource-id для вашей автоматизации.Поскольку вы используете проект xamarin, вы можете добавить код автоматизации в проект.

Тогда вы сможете увидеть cont-desc при проверке приложения.Тогда вы можете использовать элемент как:

el = self.driver.find_elements_by_accessibility_id('ProductName');
...