我正在使用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);
}
}
答案 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);
}