FluentWait与findElementByAndroidUIAutomator

时间:2015-03-23 15:26:30

标签: java android selenium appium

我使用Appium自动化原生Android应用程序并尝试使用FluentWait等待页面/元素显示使用以下代码段:

@Test
public static void Test1() {
    MobileElement mobileElement = func(getdriver());
    System.out.println(mobileElement.getText());
}

private static MobileElement func(AppiumDriver driver) {
    AndroidDriver and = (AndroidDriver) getdriver();
    String value1 = "More";
    String value2 = "new UiSelector().text(" + "\"" + value1 + "\"" + ")";

    FluentWait<AndroidDriver> wait = new FluentWait(and)
            .withTimeout(30, TimeUnit.SECONDS)
            .pollingEvery(1, TimeUnit.SECONDS)
            .ignoring(NoSuchElementException.class)
            .ignoring(TimeoutException.class);

    MobileElement myElement = wait.until(new Function<AndroidDriver, MobileElement>() {
        @Override
        public MobileElement apply(AndroidDriver androidDriver) {
            return (MobileElement) androidDriver.findElementByAndroidUIAutomator(value2);
        }
    });
    return myElement;
}

我尝试等待(最多30秒),以便在成功登录后显示更多页面。我看到的问题是内联方法立即返回&#34;使用给定的搜索参数&#34;无法在页面上找到元素。我希望FluentWait继续轮询myElement以显示在屏幕上,同时忽略&#34; NoSuchElementException&#34;。它没有发生。

我在这里做错了什么?

请告知。

1 个答案:

答案 0 :(得分:1)

我使用python并且以下代码工作正常,您可以使用 self.driver.implicitly_wait(10,5)或任何值

        self.driver.find_element_by_name('NEXT').click()
        self.driver.implicitly_wait(10)
        self.driver.find_element_by_id('com.sndfbi.android:id/m_passwordTextField').send_keys('1111abcd')
        self.driver.find_element_by_id('com.bdhasb.android:id/m_passwordConfirmTextField').send_keys('1111abcd')
        self.driver.find_element_by_name('SAVE').click()
        self.driver.implicitly_wait(10)
        self.driver.find_element_by_name('OK').click()
        self.driver.implicitly_wait(10)
        self.driver.back()