使用 Appium 和 Ruby 测试 iOS 应用程序时等待元素加载?
Posted
技术标签:
【中文标题】使用 Appium 和 Ruby 测试 iOS 应用程序时等待元素加载?【英文标题】:Wait for element to load when testing an iOS app using Appium and Ruby? 【发布时间】:2013-07-17 20:45:41 【问题描述】:我正在测试一个 ios 应用,登录后无法与元素交互,因为 Appium 运行速度太快。
有人可以指出一个使用 WebDriverWait 样式等待 Appium iOS 测试的示例吗?最好在 Ruby 中。
谢谢。
【问题讨论】:
在 ruby 或 js 中寻找完全相同的东西。 我也在寻找同样的东西。对于 android,browser.driver.manage.timeouts.page_load = 30
之类的东西似乎可以工作。在 iOS 上会弹出一个错误提示 Appium 尚未实现...
【参考方案1】:
这对我有用,但我是 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
【讨论】:
对我来说效果很好。谢谢!! 如果您确定元素将在 10 秒内加载,这是一个很好的示例。否则(例如名称更改,或时间不够),它会抛出异常 Selenium::WebDriver::Error::NoSuchElementError: No element found 并且你应该以某种方式拯救它。sleep(10)
与此类似。这有什么不同?
@Mrityunjeyan S - wait
和 timeout => 10
将延迟执行最多 10 秒,但如果预期条件变为真(在这种情况下,一旦显示元素)将停止延迟。然而,sleep(10)
无论如何都会延迟执行正好 10 秒。【参考方案2】:
我使用这个构造来等待一些元素出现:
wait_true exists find_element(:xpath, path_to_element)
当然,你不仅可以通过:xpath
找到。
你也可以设置超时时间:
wait_true(timeout) exists find_element(:xpath, path_to_element)
【讨论】:
【参考方案3】:这是我想出的一个,但在 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));
【讨论】:
按要求不是 ruby,但我追求的是 Java,所以我很高兴 ;)【参考方案4】:我在 appium java 中使用这个解决方案:
Thread.sleep(1000);
WebDriverWait wait = new WebDriverWait(driver, 30);
wait.until(ExpectedConditions.elementToBeClickable(By.name("somename")));
【讨论】:
以上是关于使用 Appium 和 Ruby 测试 iOS 应用程序时等待元素加载?的主要内容,如果未能解决你的问题,请参考以下文章