【发布时间】:2013-09-09 08:02:15
【问题描述】:
我在一个页面上有一个链接,点击它会刷新这个页面。
如何使用 Selenium-IDE 验证页面是否确实已刷新/重新加载?
【问题讨论】:
-
请在此处查看我的答案(简单刷新可能还不够):stackoverflow.com/questions/10245641/…
标签: selenium selenium-ide
我在一个页面上有一个链接,点击它会刷新这个页面。
如何使用 Selenium-IDE 验证页面是否确实已刷新/重新加载?
【问题讨论】:
标签: selenium 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 中找不到元素,您应该捕获异常。 即如果它进入 catch 块,那么你知道页面没有被刷新。
try{
WebElement element = driver.findElement(selector); //The refresh link user clicks
element.click();
clicked = true;
}catch(Exception e){
clicked = false;
throw new ElementNotFoundException();
}
【讨论】: