我正在使用量角器和黄瓜在一些非倾斜页面上进行自动化测试。我已将browser.ignoreSynchronization设置为true。
当我运行场景时,仅正确执行浏览器.get(...)的第一行。我可以看到该网址加载正常。以下所有步骤均未执行(因为我看不到它们在浏览器中运行),但是我看到了所有绿色并且所有结果都已通过。代码中的等待和睡眠都不会对执行产生任何影响。
但是,如果代码中有错误,可以说在方案/ stepdef的最后一步中,我有错误的代码 browser.blah.something(); ,那么我可以看到所有睡眠等待被遵守。
我不知道发生了什么!为什么此错误代码导致量角器服从超时?为什么会有这种奇怪的行为?任何想法?还只是想知道为什么 browser.blah.something()不会导致编译时错误(测试开始之前发生错误)?
答案 0 :(得分:3)
这些错误很可能是语法或类型错误之类的东西,它们是在执行之前进行分析的,而不是测试中的失败。
您的以下几行不起作用的原因很多,除非您向我们展示代码,否则我们无法说出什么。
我在这里的猜测是,第一行代码是有希望的。实际上,wait(http://www.protractortest.org/#/api?view=webdriver.WebDriver.prototype.wait)本身会返回一个承诺。
承诺异步运行,而不是同步运行,这可能是您期望的。
这是可能发生的情况的简短示例:
->应用访问网址
->应用等待5秒钟(假设这是一个承诺)
->关闭应用程序
您可能希望应用程序访问该URL,然后等待5秒钟然后关闭,但实际上会发生的情况是该应用程序将访问该URL,然后立即关闭。
为什么?因为等待5秒是在另一个线程上执行的,而主线程却从未等待5秒完成(javascript是单线程的,但是...您可以在某处看到它)
要解决此问题,您可以将它们链接(https://javascript.info/promise-chaining)或使用async / await,具体取决于要遵循的es版本。
我不会深入研究诺言,因为这似乎不是目标问题,但是如果诺言是原因,那么这里是一个不错的article入门
并回答为什么browser.something()没有给出错误消息,browser实际上是ProtractorBrowser.prototype,由于它会很长,因此我不会深入研究回答,不过这里还是一个不错的article
尝试执行以下操作
console.log(browser)
browser.something = "abc"
console.log(browser)
第二个日志应显示一个新属性“ something”,其值为“ abc”
答案 1 :(得分:0)
现在最好使用
browser. waitForAngularEnabled(false)
代替
browser.ignoreSynchronization = true
http://www.protractortest.org/#/api?view=ProtractorBrowser.prototype.waitForAngularEnabled
此外,尝试将其放入beforeEach()
describe('my suite', ()=>{
beforeEach(()=> {
browser.waitForAngularEnabled(false)
})
it('my test', ()=> {
...
})
})
我建议将其放入
配置文件的onPrepare
部分或进入beforeEach
块。因此它将在运行所有测试之前设置。
//Your protractor configuration file
let conf = {
// Some other options ...
onPrepare: () => {
browser.waitForAngularEnabled(false)
}
}