我在页面上有一个链接,点击后会刷新此页面。
如何通过Selenium-IDE验证页面是否已真正刷新/重新加载?
答案 0 :(得分:3)
我已经通过声明页面上最初存在的元素在刷新后没有出现在页面上来解决它,然后等待直到页面完全刷新,并断言元素再次出现。< / p>
<强>更新强> 如果存在一些文本框元素,也可以轻松验证页面刷新。只需使用 type 命令将一些文本插入文本框字段,然后刷新页面,文本框内的文本应返回其原始状态。
答案 1 :(得分:2)
简单的方法是等到页面上的最后一个元素。
在Selenium-IDE中,您可以使用大量的wait *命令来执行此操作,例如:
waitForElementPresent [element_xPath]
waitForVisible [element_xPath]
等等。
答案 2 :(得分:1)
如果像我一样,你发现检查元素的可见性和隐形性是不可靠的,那么还有另一种选择。
如果您的网站使用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。如果事情仍然在幕后发生,那就不会。
答案 3 :(得分:0)
您可以假设 - 如果找到元素,并且已调用element.click(),则单击该元素。
但是对于良好实践 - 如果在DOM中找不到该元素,则应该捕获异常。 I.E如果它进入catch块,那么你知道页面还没有刷新。
try{
WebElement element = driver.findElement(selector); //The refresh link user clicks
element.click();
clicked = true;
}catch(Exception e){
clicked = false;
throw new ElementNotFoundException();
}