Java Selenium-等待页面呈现动态页面
我有一个动态网页,可以刷新和加载新数据。我正在使用Selenium,需要等到页面渲染完成后才能继续检查页面。我看过很多关于等待页面加载或使用显式等待的帖子(隐式等待可以解决问题,但非常不公平,速度不够快)。使用显式等待的问题是没有关于刷新后将出现什么的任何信息。我看到一些解决方案谈到等待与服务器的所有连接结束,但这并不能保证实际的UI已经完成渲染Java Selenium-等待页面呈现动态页面,java,ajax,angularjs,selenium,web,Java,Ajax,Angularjs,Selenium,Web,我有一个动态网页,可以刷新和加载新数据。我正在使用Selenium,需要等到页面渲染完成后才能继续检查页面。我看过很多关于等待页面加载或使用显式等待的帖子(隐式等待可以解决问题,但非常不公平,速度不够快)。使用显式等待的问题是没有关于刷新后将出现什么的任何信息。我看到一些解决方案谈到等待与服务器的所有连接结束,但这并不能保证实际的UI已经完成渲染 我需要的是一种方法来知道页面是否已经完成渲染(而不是加载!!)首先,你要知道页面加载后会出现什么样的结构。您不知道页面上没有哪些标记,但您知道DOM的
我需要的是一种方法来知道页面是否已经完成渲染(而不是加载!!)首先,你要知道页面加载后会出现什么样的结构。您不知道页面上没有哪些标记,但您知道DOM的外观。这就是为什么通常使用页面文本进行测试是最糟糕的做法,而使用DOM测试网站则是最好的做法。因此,根据页面上显示的结构,您需要有明确的方式等待特定标记出现在页面上。 还有一个解决方案(但正如我所说,这并不是最佳实践)是等待
文档。readystate
是“完成的”。这种状态在任何情况下都不会有帮助,但如果页面上仍有加载内容,则在超过一半的情况下,它不会返回完整。因此,您应该具有某种正在执行的隐式状态:
string readyState = javascript.ExecuteScript("if (document.readyState) return document.readyState;").ToString();
然后检查:
readyState.ToLower() == "complete";
顺便说一句,如果您将使用量角器作为angular js应用程序测试执行器,它将等待默认情况下加载angular页面,或者在某些困难情况下,您可以使用:
browser.waitForAngular();
或者在回调中做些什么
button.click().then(function() {
// go next step
});
我测试的产品也有类似的问题。例如,我必须为click、click\u checkbox、sendKeys和getText创建特殊函数。其中包括用于处理NoTouchElement StaleElement引用异常的try-catch方法。如果操作失败,例如发送错误的文本,它也会重试
document.readyState
这对你来说还不够。它只等待DOM加载。加载HTML标记时,它返回“complete”。因此,您必须等待每个单独的项目。这对我来说非常适用于动态呈现的网站-我在获取数据时没有时间限制,因为它会在后台运行,如果效率是一个问题,这可能不是您的解决方案(50秒对于任何网站来说,在就绪状态完成后加载都是一个巨大的时间):
WebDriverWait wait=newwebdriverwait(驱动程序,50);
等待.until((ExpectedCondition)wd->((JavascriptExecutor)wd).executeScript(“return document.readyState”).equals(“complete”)代码>