我相信这段代码有一个小的基本问题,但我正在与它斗争几个小时,并希望得到一些帮助。
我写了以下简单的代码:
var assert = require('assert'),
webdriver = require('selenium-webdriver');
describe('Google Search', function() {
var driver;
before(function() {
console.log("before START")
driver = new webdriver.Builder()
.forBrowser('firefox')
.build();
console.log("before END")
});
it('should work', function(done) {
console.log("it START")
driver.get('http://www.google.com/');
console.log("it END")
});
after(function() {
console.log("after START")
driver.quit();
console.log("after END")
});
});
并运行它:
mocha open_google --timeout 15000
我希望火狐被打开(在阻止之前),重定向到谷歌(它),然后关闭(之后)。
然而,它不会发生。我可以看到:
- before() 和 it() 可以快速执行(前 4 个 console.logs 几乎可以立即打印)
- 几秒钟后,Firefox 被打开,但永远不会去谷歌,它只是在那里停留,直到 15 秒过去。
- after() 块完成,浏览器关闭
我在这里做错了什么?
取决于多种因素,包括操作系统/浏览器组合, WebDriver 可能会也可能不会等待页面加载。在一些 在这种情况下,WebDriver 可能会在页面具有之前返回控制权 完成,甚至开始加载。为了确保稳健性,您需要 使用显式和等待元素存在于页面中 隐式等待。[1]
[1]: http://www.seleniumhq.org/docs/03_webdriver.jsp
这意味着,您应该等待元素可见以获得预期的行为。希望这个解决方案会起作用。