不,但是真的!我知道这个通用问题已经被问过数千遍了,但是有一些更具体的问题对我来说似乎可行,因此我想知道如何实现它
我正在使用protractor测试角度应用。在应用程序内部,我想验证单击链接时我是否被重定向到了正确的页面(非角度)。问题在于,直到我到达要验证的页面,URL才会更改3次左右(发生多个重定向),因此我无法让等待功能等待页面完全加载
browser.sleep()
超过1000毫秒!browser.waitForAngular()
,因为这不是有角度的页面ExpectedConditions.urlIs()
的网址是我要声明的变量ExpectedConditions.presenseOf()
页面可能会更改,因此我不能依赖其中的元素browser.executeScript("return window.document.readyState")
立即返回compete
,尽管页面仍在加载中(我确定这是我所需要的,但是那也不起作用)innerHtml
至少3秒钟不变的函数,但是它失败了,因为有时重定向之间会出现3秒钟以上的暂停。 3秒以上的一切都不是合理的超时时间我注意到的是,当浏览器正在加载页面时,Reload this page
按钮将其状态更改为Stop loading this page
(X图标),直到我被重定向到最终页面(以下屏幕截图)。因此问题是是否有一种方法可以使量角器指向chrome用于选择显示哪个图标的相同条件?
vs
如果不完全相同,但是如何使量角器挂起,直到页面完全加载
很明显,有很多肮脏的解决方案可以像显式等待一样进行。但是我会不时地回到这个问题上,所以我对这些肮脏的解决方案不感兴趣,这些解决方案在70%的时间内都可以用于特定原因
P.S。我发现按钮更改了document.load()
event上的图标。但是我无法弄清楚应该在控制台中写些什么,以便该脚本在刷新页面时记录一条消息
答案 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)