如何点击按钮,等待模糊等事件,然后获取网站的页面源?
我知道我可以使用getPagesource()方法,但我只想在显示jquery加载图像后才这样做。
答案 0 :(得分:1)
如果模糊事件产生可见效果,您可以等待该效果,例如等待显示图像。
否则,如果该事件没有可见效果,则需要一个“测试挂钩”来告诉您的测试与该事件关联的函数已经运行,就像将javascript变量设置为您可以使用的已知值在测试中查询。
对于这两种情况,您可以使用显式等待条件,如文档中所示:
http://seleniumhq.org/docs/04_webdriver_advanced.html#explicit-and-implicit-waits
编辑:
关于你的评论,Nyegaard,你可以像这样使用明确的等待:
WebDriver driver = new FirefoxDriver();
driver.get("http://somedomain/url_that_delays_loading");
Boolean expectedTextAppeared =
(new WebDriverWait(driver, 10))
.until(ExpectedConditions.textToBePresentInElement(
By.id("ctl00_content_createnewschema_modalAlert_alertMessage"), "textYoureExpecting"));
此代码将等待“textYoureExpecting”出现在超时为10秒的范围内。如果它需要更长的时间才能显示,您只需要调整超时。
答案 1 :(得分:0)
对于网页中的所有AJAX请求,我使用jQuery.Active标志来确定页面是否已加载。如果jQuery.Active非零,则表示这些是浏览器正在处理的活动请求数。当它降为零时,这意味着活动请求的数量为无。我没有将此标志用于模糊事件,但您可以尝试一下。你应该明确地使用隐式和显式等待Luiz建议。这是一个等待5分钟以完成活动请求的函数。您可以参数化,添加try,catch等。
public int waitforAJAXRequestsToComplete(){
long start = System.currentTimeMillis();
long duration;
boolean ajaxNotReady = true;
while(ajaxNotReady){
if(((JavascriptExecutor)driver).executeScript("return jQuery.active").toString().equals("0"))
return 0;
duration = System.currentTimeMillis() - start;
duration = (long) (duration/(60*1000F));
if(duration>5.0)
return 1;
}
return 1;
}