我在页面上有一个链接,单击该链接会刷新此页面。
如何使用 Selenium-IDE 验证页面是否已真正刷新/重新加载?
我通过断言最初存在于页面上的元素在刷新后立即不存在于页面上来解决它,然后等到页面完全刷新,并断言该元素再次存在。
更新: 如果存在一些文本框元素,也可以轻松验证页面刷新。只需使用type命令在文本框字段中插入一些文本,然后刷新页面,文本框内的文本就会恢复到原来的状态。
简单的方法是等到页面上的最后一个元素。
在 Selenium-IDE 中,您可能会使用很多 wait*-commands 来执行此操作,例如:
waitForElementPresent [element_xPath]
waitForVisible [element_xPath]
等等。
如果像我一样,您发现检查元素的可见性和不可见性可能不可靠,那么还有另一种选择。
如果您的网站使用 jQuery,我发现最可靠的方法是检查状态jQuery.active
以确定页面刷新。
例如,在 C# 中,我使用以下方法:
public bool CheckPageHasRefreshed()
{
try
{
// Wait for jQuery to become active (the page is refreshing)
wait.Until(x => (((IJavaScriptExecutor)WebDriver).ExecuteScript("return jQuery.active != 0")));
// Wait for jQuery to become inactive (the page refresh has completed)
wait.Until(x => (((IJavaScriptExecutor)WebDriver).ExecuteScript("return jQuery.active === 0")));
return true;
}
catch (WebDriverTimeoutException)
{
return false;
}
}
这是因为 jQuery.active 只会在页面上的所有后端加载活动完成时返回 0。如果事情还在幕后发生,那就不会了。
您可以假设 - 如果找到元素,并且 element.click() 已被调用,则该元素已被单击。
但是为了良好的做法 - 如果在 DOM 中找不到该元素,您应该捕获异常。IE如果进入catch块,那么你就知道页面没有被刷新。
try{
WebElement element = driver.findElement(selector); //The refresh link user clicks
element.click();
clicked = true;
}catch(Exception e){
clicked = false;
throw new ElementNotFoundException();
}