如何使用selenium webdriver处理多个jQuery弹出窗口

时间:2014-03-06 10:18:59

标签: selenium selenium-webdriver

我正在使用selenium webdriver 2.39开发java,我们有一个应用程序,其中多个'处理'弹出窗口显示2-5秒并自动关闭,这取决于数据。现在,问题是如何处理这个弹出窗口,这个弹出窗口是jQuery弹出窗口。一旦所有这三个弹出窗口打开并处理数据并自动关闭,我的脚本才能进一步工作。但是,我不能使用等待时间,因为此脚本用于使用JMeter进行负载测试,因此处理时间可能需要大于或小于5秒。有什么方法我们可以知道屏幕上是否存在弹出窗口?我使用下面给出的示例代码,但它只返回父窗口,它不识别jQuery弹出窗口,使用下面给出的代码,如果弹出窗口存在与否,我可以获得,但仅当它不是jQuery弹出窗口时。任何人都可以帮助我吗?

public void FocusOnWindow() throws Exception{

    int i=0;

    do {
        handles=driver.getWindowHandles();//get all windows
        iterator = handles.iterator();
        if(iterator.hasNext()){
            subWindowHandler = iterator.next();
            if(subWindowHandler==null){
                i=0;
            }else if(subWindowHandler!=null){
                if(subWindowHandler!=parentWindowHandler){
                    popup = true;
                    i=2;
                }
            }
        }
    }while(i<2);
    if(popup){
        do{
            handles=driver.getWindowHandles();
            iterator = handles.iterator();
            Thread.sleep(500);
            if(iterator.hasNext()){
                subWindowHandler = iterator.next();
                if(subWindowHandler!=parentWindowHandler){
                    if(subWindowHandler==null){
                        String source = driver.getPageSource();
                        if(source==null){
                            i=2;
                        }
                    }
                }else {
                    i=0;
                }
                //System.out.println("No any other popup.");
            }

        }while (i<2);
    }
}

2 个答案:

答案 0 :(得分:1)

首先,我强烈建议不要急于等待。

如果你知道任何一个独特的元素和一部分后期处理弹出屏幕(即结果用户屏幕),那么请使用selenium waitForElement() API函数,智能地等待要出现的元素,一旦出现就执行进一步的操作

查看this链接,了解使用它的优势。

对于selenium的Java绑定,你可以使用这样的东西 -

WebDriverWait wait = new WebDriverWait(driver, /*seconds=*/3);
elementOfPage = wait.until(presenceOfElementLocated(By.id("id_of_element")));

Function<WebDriver, WebElement> presenceOfElementLocated(final By locator) {
return new Function<WebDriver, WebElement>() {
    public WebElement apply(WebDriver driver) {
        return driver.findElement(locator);
    }
};
}

答案 1 :(得分:0)

public boolean runScript(){
        JavascriptExecutor js = (JavascriptExecutor) driver;
        return  (Boolean) js.executeScript("return jQuery.active==0;");
        }


    public void FocusOnWindow() throws Exception{
        int i=0;
        do {
            if(!runScript()){
                System.out.println("Popup exists");
                i++;
            }else{
                i=5000;
                System.out.println("Popup does not exists");
            }
        }while(i<5000);
    }