9

我正在测试一个 iOS 应用程序,登录后无法与元素交互,因为 Appium 运行速度太快。

有人可以指点我一个使用 WebDriverWait 样式等待 Appium iOS 测试的示例吗?最好在 Ruby 中。

谢谢。

4

4 回答 4

13

这对我有用,但我是 Appium 的新手

#code that navigated to this page
wait = Selenium::WebDriver::Wait.new :timeout => 10
wait.until { @driver.find_element(:name, 'myElementName').displayed? }
#code that deals with myElementName
于 2013-08-07T23:00:14.433 回答
6

我使用这种结构来等待一些元素出现:

wait_true { exists { find_element(:xpath, path_to_element) } }

当然,您不仅可以通过:xpath.

您还可以设置超时:

wait_true(timeout) { exists { find_element(:xpath, path_to_element) } }
于 2015-02-12T10:14:36.923 回答
5

这是我想出的一个,但在java中。有点冗长,但它会引导您了解它应该如何等待。它将花费几秒钟的等待时间,然后每秒检查一次元素是否存在。一旦它找到了元素,它就会确保它是可见的,因此可以与之交互。“驱动程序”显然是 WebDriver 对象。

public void waitForVisible(final By by, int waitTime) {
    wait = new WebDriverWait(driver, timeoutInSeconds);
    for (int attempt = 0; attempt < waitTime; attempt++) {
        try {
            driver.findElement(by);
            break;
        } catch (Exception e) {
            driver.manage().timeouts().implicitlyWait(1, TimeUnit.SECONDS);
        }
    }
    wait.until(ExpectedConditions.visibilityOfElementLocated(by));
}
于 2013-12-05T20:12:23.217 回答
3

我在 appium java 中使用这个解决方案:

  • Thread.sleep(1000);

  • WebDriverWait wait = new WebDriverWait(driver, 30); wait.until(ExpectedConditions.elementToBeClickable(By.name("somename")));

于 2013-07-30T06:05:14.113 回答