量角器非角度测试在代码中出现错误之前,不服从等待和休眠

时间:2018-07-29 22:19:25

标签: javascript angular automation protractor cucumber

我正在使用量角器和黄瓜在一些非倾斜页面上进行自动化测试。我已将browser.ignoreSynchronization设置为true。

当我运行场景时,仅正确执行浏览器.get(...)的第一行。我可以看到该网址加载正常。以下所有步骤均未执行(因为我看不到它们在浏览器中运行),但是我看到了所有绿色并且所有结果都已通过。代码中的等待和睡眠都不会对执行产生任何影响。

但是,如果代码中有错误,可以说在方案/ stepdef的最后一步中,我有错误的代码 browser.blah.something(); ,那么我可以看到所有睡眠等待被遵守。

我不知道发生了什么!为什么此错误代码导致量角器服从超时?为什么会有这种奇怪的行为?任何想法?还只是想知道为什么 browser.blah.something()不会导致编译时错误(测试开始之前发生错误)?

2 个答案:

答案 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)
    }
}