Ser*_*kov 5 javascript google-chrome webdriver selenium-chromedriver protractor
不,但是真的!我知道这个通用问题已被问过数千次,但有一些更具体的问题对我来说看起来可行,因此我想知道如何实现它
我正在使用Protractor测试一个角度应用程序。在应用程序内部,我想验证当我单击链接时,我是否被重定向到正确的页面(非角度)。问题是,在我到达我正在验证的页面之前,url 会更改 3 次左右(发生多次重定向),因此我无法让等待函数等到页面完全加载
browser.sleep()超过1000毫秒!browser.waitForAngular()因为这不是一个有角度的页面ExpectedConditions.urlIs()url 是我断言的变量ExpectedConditions.presenseOf()页面可能会发生变化,所以我不能依赖里面的元素browser.executeScript("return window.document.readyState")立即返回compete,尽管页面仍在加载(我确定这就是我需要的,但这也不起作用)innerHtml整个页面至少 3 秒不发生变化的函数,但它失败了,因为有时重定向之间会出现超过 3 秒的暂停。任何超过 3 秒的超时都不是合理的超时我注意到,当浏览器加载页面时,Reload this page按钮将其状态更改为Stop loading this page(X 图标),直到我重定向到最终页面(下面的屏幕截图)。那么问题是有没有办法让量角器指向与chrome用来选择显示哪个图标相同的条件?
与
如果不完全相同,但如何使量角器挂起直到页面完全加载
显然,我可以做很多肮脏的解决方案,例如显式等待。但我每隔一段时间就会回到这个问题,所以我对这些肮脏的解决方案不感兴趣,这些解决方案在 70% 的时间内针对特定原因起作用
document.load() PS 我认为该按钮会更改event上的图标。但我不知道应该在控制台中写什么,以便该脚本在刷新页面时记录消息
我有以下代码片段来解决这个问题,我等待显示一个元素:
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)
如果你能找到最后加载的元素,或者只是获取重定向的元素,它可以创造奇迹。干杯。
| 归档时间: |
|
| 查看次数: |
779 次 |
| 最近记录: |