你如何使用Selenium 2的事件

时间:2011-11-08 09:44:54

标签: events webdriver selenium-webdriver

如何点击按钮,等待模糊等事件,然后获取网站的页面源?

我知道我可以使用getPagesource()方法,但我只想在显示jquery加载图像后才这样做。

2 个答案:

答案 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;
    }