我用Selenium编写了用于自动执行应用程序的代码[其加载时间有所不同],并且当我们使用Thread.sleep作为加载时间时,它可以正常工作。我需要移出thread.sleep,因为这并不理想编写代码的方式,因此我尝试使用Selenium给出的所有等待(隐式,显式和流畅)。
尽管脚本不一致,并且经常失败[主要是找不到元素和过时的元素异常],所以需要知道,因为我在Selenium中拥有所有框架和代码,因此我必须遵守以下规定:可以在其中导入量角器jar文件并使用一些代码行,以使我的应用程序与脚本同步。
答案 0 :(得分:0)
Thread.sleep()
上正常运行,则您的隐式等待不会有所帮助。
Thread.sleep(time)
是明确等待的极端情况。
显式等待是您定义的代码,用于在继续执行代码之前等待特定条件发生。
在Java硒绑定中,我们可以这样定义和使用Explicit等待:
WebElement myDynamicElement = (new WebDriverWait(driver, 10))
.until(ExpectedConditions.presenceOfElementLocated(By.id("myDynamicElement")));
此方法最多等待10秒,然后引发TimeoutException,否则如果发现该元素将在0-10秒内返回它。默认情况下,WebDriverWait每500毫秒调用ExpectedCondition,直到成功返回。
请注意:请勿混合使用隐式和显式等待。这样做可能导致无法预测的等待时间。
问题:主要在找不到元素上并且发生陈旧元素异常?
只需验证您的定位器。定位器应为静态而非动态。仅举例来说,您永远不要使用由JS或任何其他编程语言生成的任何Web元素的动态ID。
使用量角器,您不仅可以同步脚本。您现在所要做的就是更改定位器和等待时间。
希望这会对您有所帮助。
答案 1 :(得分:0)
不可能在Selenium中使用量角器,但是您可以将所有测试重写到量角器中,并且您将全部继承自Selenium。量角器是Webdriverjs的包装器,因此您可以在量角器+量角器自身的定位器和异步等待功能中获得webdriverjs的所有功能。