如何在量角器中等待自动测试脚本,直到页面完全加载

时间:2020-02-07 14:33:14

标签: javascript google-chrome protractor webdriver selenium-chromedriver

不,但是真的!我知道这个通用问题已经被问过数千遍了,但是有一些更具体的问题对我来说似乎可行,因此我想知道如何实现它

问题

我正在使用protractor测试角度应用。在应用程序内部,我想验证单击链接时我是否被重定向到了正确的页面(非角度)。问题在于,直到我到达要验证的页面,URL才会更改3次左右(发生多个重定向),因此我无法让等待功能等待页面完全加载

我尝试过的/对我不起作用的

  1. 我反对browser.sleep()超过1000毫秒!
  2. browser.waitForAngular(),因为这不是有角度的页面
  3. ExpectedConditions.urlIs()的网址是我要声明的变量
  4. ExpectedConditions.presenseOf()页面可能会更改,因此我不能依赖其中的元素
  5. browser.executeScript("return window.document.readyState")立即返回compete,尽管页面仍在加载中(我确定这是我所需要的,但是那也不起作用)
  6. 我甚至尝试添加一个等待整个页面的innerHtml至少3秒钟不变的函数,但是它失败了,因为有时重定向之间会出现3秒钟以上的暂停。 3秒以上的一切都不是合理的超时时间

问题

我注意到的是,当浏览器正在加载页面时,Reload this page按钮将其状态更改为Stop loading this page(X图标),直到我被重定向到最终页面(以下屏幕截图)。因此问题是是否有一种方法可以使量角器指向chrome用于选择显示哪个图标的相同条件?

enter image description here

vs

enter image description here

如果不完全相同,但是如何使量角器挂起,直到页面完全加载

重要考虑

很明显,有很多肮脏的解决方案可以像显式等待一样进行。但是我会不时地回到这个问题上,所以我对这些肮脏的解决方案不感兴趣,这些解决方案在70%的时间内都可以用于特定原因

P.S。我发现按钮更改了document.load() event上的图标。但是我无法弄清楚应该在控制台中写些什么,以便该脚本在刷新页面时记录一条消息

3 个答案:

答案 0 :(得分:1)

您尝试过

await browser.wait(async () =>
        await browser.driver.executeScript('return document.readyState;') === 'loading', 2000)
        .then(() => true, () => true);
await browser.wait(async () =>
        await browser.driver.executeScript('return document.readyState;') === 'complete', 5000)

答案 1 :(得分:0)

我有以下针对问题的摘要,我等待显示一个元素:

ElementFinder.prototype.secureIsDisplayed = function () {
return browser
.wait(EC.visibilityOf(this), actionTimeout)
.then(() => this.isDisplayed())
.catch(err => {
    throw new Error(`Expected ElementFinder ${this.locator()} to be displayed. ${err.toString()}`);
});
};

其中actionTimeout是const int,EC = protractor.ExpectedConditions则需要导入文件并按如下所示进行调用:

import './asd.ts'
element(by.css('.myClass')). secureIsDisplayed()

我是否可以找到最后一个加载的元素,或者仅获取重定向元素就可以创造奇迹。 干杯。

答案 2 :(得分:0)

您尝试过...

browser.executeScript("return window.jQuery.active").equals(0)
相关问题