Selenium WebDriver和通用等待或延迟

时间:2015-07-23 05:02:15

标签: javascript python angularjs selenium selenium-webdriver

所以我拼命寻找一种方法来延迟WebDriver中的一些执行,但我似乎找不到一个。

我尝试运行黑盒测试的Web应用程序,使用ajax调用但这些ajax调用不会在DOM上呈现任何内容,因此我无法使用显式等待。此外,隐式仅适用于find_element语句,并且再次无效。

我使用time.sleep()取得了成功,但我希望有更好的方法可以延迟执行。

2 个答案:

答案 0 :(得分:3)

根据我的理解(这里凌晨1点,我可能会错过一些东西),你需要让你的测试与AngularJS同步,等待未完成的请求和角度来解决问题"安顿下来"。 / p>

这就是Javascript世界中protractor完美解决的问题 - 它总是知道Angular何时准备就绪,它使测试更加自然,你甚至不会考虑同步问题 - 它可以顺利运行开箱即用:

  

您不再需要为测试添加等待和睡眠。量角器   可以自动执行测试中的下一步   网页完成待处理任务,因此您不必担心   等待您的测试和网页同步。

对于Python,有pytractor项目听起来像你应该评估的东西:

  

pytractor是Python的Selenium绑定的扩展。它的   目标是使用Python更容易地测试angular.js应用程序。

     

它建立在量角器的某些部分,"官方"使用Javascript   Angular.js的E2E / Scenario测试框架。

作为红旗,请注意项目未得到积极维护。至少,您可以学习源代码并使用代码中引入的思想。

请注意,内部protractorpytractor会注入异步执行的客户端脚本。为了等待Angular准备好#34;,他们都使用angular.getTestability(el).whenStable()source)。

另见:

答案 1 :(得分:0)

这应该有效:

var driver = new webdriver.Builder().withCapabilities(webdriver.Capabilities.chrome()).build();

driver.sleep(1000);