NoSuchElementException с помощью uiautomator2 - PullRequest
0 голосов
/ 28 августа 2018

Я пытаюсь запустить свой код Python в Sauce Labs, и он отлично работает, если не установлена ​​возможность automationName (по умолчанию Appium согласно http://appium.io/docs/en/writing-running-appium/caps/). Однако, когда я устанавливаю эту возможность на UiAutomator2, в строке ниже выдается ошибка element_some_text = self.driver.find_element_by_xpath("//android.widget.TextView[@text='Some Text']"):

NoSuchElementException: Message: An element could not be located on the page using the given search parameters.

Вот мой код:

import lemoncheesecake.api as lcc
from appium import webdriver


@lcc.suite("My test suite")
class my_test_suite:
    caps = {}
    driver = None

    def setup_suite(self):
        self.caps['appiumVersion'] = "1.8.1"
        self.caps['deviceName'] = "Android GoogleAPI Emulator"
        self.caps['deviceOrientation'] = "portrait"
        self.caps['platformVersion'] = "7.1"
        self.caps['platformName'] = "Android"
        self.caps['automationName'] = 'uiautomator2'
        self.caps['autoGrantPermissions'] = True
        self.caps['app'] = 'https://somesite.com/storage/my_app.apk'
        self.caps['appPackage'] = 'com.xxx.abc.my_app'
        self.driver = webdriver.Remote(
            'http://username:passkey@ondemand.saucelabs.com:80/wd/hub', self.caps)

    @lcc.test("My app test")
    def verify_app_launch(self):
        self.driver.implicitly_wait(10)
        element_some_text = self.driver.find_element_by_xpath("//android.widget.TextView[@text='Some Text']")
        element_some_text.click()

    def teardown_suite(self):
        self.driver.quit()

1 Ответ

0 голосов
/ 03 сентября 2018

Использование явного ожидания невидимости элемента (определенного ниже), появляющегося до обязательного элемента Some Text, решило проблему. Как ни странно , это явное ожидание не требовалось в случае значения по умолчанию automationName.

wait = WebDriverWait(self.driver, 20)
wait.until(EC.invisibility_of_element_located((By.ID, "com.xxx.abc.my_app:id/prior_element")))

PS: хотя я понимаю, что этот ответ может получить несколько отрицательных голосов, я твердо верю, что это странное поведение двигателя UiAutomator2.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...