所以我拼命寻找一种方法来延迟WebDriver中的一些执行,但我似乎找不到一个。
我尝试运行黑盒测试的Web应用程序,使用ajax调用但这些ajax调用不会在DOM上呈现任何内容,因此我无法使用显式等待。此外,隐式仅适用于find_element
语句,并且再次无效。
我使用time.sleep()
取得了成功,但我希望有更好的方法可以延迟执行。
答案 0 :(得分:3)
根据我的理解(这里凌晨1点,我可能会错过一些东西),你需要让你的测试与AngularJS同步,等待未完成的请求和角度来解决问题"安顿下来"。 / p>
这就是Javascript世界中protractor
完美解决的问题 - 它总是知道Angular何时准备就绪,它使测试更加自然,你甚至不会考虑同步问题 - 它可以顺利运行开箱即用:
您不再需要为测试添加等待和睡眠。量角器 可以自动执行测试中的下一步 网页完成待处理任务,因此您不必担心 等待您的测试和网页同步。
对于Python,有pytractor
项目听起来像你应该评估的东西:
pytractor是Python的Selenium绑定的扩展。它的 目标是使用Python更容易地测试angular.js应用程序。
它建立在量角器的某些部分,"官方"使用Javascript Angular.js的E2E / Scenario测试框架。
作为红旗,请注意项目未得到积极维护。至少,您可以学习源代码并使用代码中引入的思想。
请注意,内部protractor
和pytractor
会注入异步执行的客户端脚本。为了等待Angular准备好#34;,他们都使用angular.getTestability(el).whenStable()
(source)。
另见:
答案 1 :(得分:0)
这应该有效:
var driver = new webdriver.Builder().withCapabilities(webdriver.Capabilities.chrome()).build();
driver.sleep(1000);