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

Ser*_*kov 5 javascript google-chrome webdriver selenium-chromedriver protractor

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

问题

我正在使用Protractor测试一个角度应用程序。在应用程序内部,我想验证当我单击链接时,我是否被重定向到正确的页面(非角度)。问题是,在我到达我正在验证的页面之前,url 会更改 3 次左右(发生多次重定向),因此我无法让等待函数等到页面完全加载

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

  1. 我反对browser.sleep()超过1000毫秒!
  2. browser.waitForAngular()因为这不是一个有角度的页面
  3. ExpectedConditions.urlIs()url 是我断言的变量
  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用来选择显示哪个图标相同的条件?

在此输入图像描述

在此输入图像描述

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

需要考虑的重要事项

显然,我可以做很多肮脏的解决方案,例如显式等待。但我每隔一段时间就会回到这个问题,所以我对这些肮脏的解决方案不感兴趣,这些解决方案在 70% 的时间内针对特定原因起作用

document.load() PS 我认为该按钮会更改event上的图标。但我不知道应该在控制台中写什么,以便该脚本在刷新页面时记录消息

Pét*_*óth 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()}`);
});
};
Run Code Online (Sandbox Code Playgroud)

其中actionTimeout是 const int ,EC = protractor.ExpectedConditions您需要导入该文件并像这样调用它:

import './asd.ts'
element(by.css('.myClass')). secureIsDisplayed()
Run Code Online (Sandbox Code Playgroud)

如果你能找到最后加载的元素,或者只是获取重定向的元素,它可以创造奇迹。干杯。