Java WebDriver在特定时间后关闭弹出窗口
我有一个基于Java WebDriver在特定时间后关闭弹出窗口,java,selenium,selenium-webdriver,webdriver,webdriverwait,Java,Selenium,Selenium Webdriver,Webdriver,Webdriverwait,我有一个基于seleniumwebdriver的测试,它填写一个表单并发送给处理。在处理期间,窗口打开。有时处理失败,但此窗口未关闭,因此无法获得结果。本测试的目的是获得结果。我尝试设置此窗口的超时时间,因此它应该在预定义的时间后关闭(我现在将其设置为10秒)。通过WebDriver,表单应该重新发送。我使用以下代码 WebElement webElement; try { driver.manage().timeouts().implicitlyWait(10, TimeUnit.SE
seleniumwebdriver
的测试,它填写一个表单并发送给处理。在处理期间,窗口打开。有时处理失败,但此窗口未关闭,因此无法获得结果。本测试的目的是获得结果。我尝试设置此窗口的超时时间,因此它应该在预定义的时间后关闭(我现在将其设置为10秒)。通过WebDriver
,表单应该重新发送。我使用以下代码
WebElement webElement;
try {
driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);
driver.findElement(sendButton).click();
webElement = wait.until(ExpectedConditions.presenceOfElementLocated(By.className("button-resultdown")));
} catch (TimeoutException ex) {
webElement = null;
} finally {
driver.manage().timeouts().implicitlyWait(5, TimeUnit.SECONDS);
}
if (webElement == null) {
driver.findElement(popUpClose).click();
TimeUnit.SECONDS.sleep(4);
driver.findElement(sendButton).click();
}
弹出窗口在10秒后不会自动关闭。我检查了元素定位器,它们是有效的。最佳做法是不要同时使用显式和隐式等待,而是查找更多详细信息。
对于popup close,您可以尝试使用JavaScript单击,或者等待
popUpClose
可单击
JavascriptExecutor js = (JavascriptExecutor) driver;
driver.findElement(sendButton).click();
List<WebElement> elements = waitElements(driver, 5, By.className("button-resultdown"));
if (elements.size() == 0){
List<WebElement> popUpCloseButtons = driver.findElements(popUpClose);
System.out.println("Popup Close Buttons size: " + popUpCloseButtons.size());
if (popUpCloseButtons.size() > 0)
js.executeScript("arguments[0].click();", popUpCloseButtons.get(popUpCloseButtons.size() - 1));
//popUpCloseButtons.get(popUpCloseButtons.size() - 1).click();
}
JavascriptExecutor js=(JavascriptExecutor)驱动程序;
driver.findElement(sendButton).单击();
List elements=waitElements(driver,5,By.className(“button resultdown”);
if(elements.size()==0){
列出popUpCloseButtons=driver.findElements(popUpClose);
System.out.println(“弹出关闭按钮大小:+popUpCloseButtons.size());
如果(popUpCloseButtons.size()>0)
js.executeScript(“参数[0]。单击();”,popUpCloseButtons.get(popUpCloseButtons.size()-1));
//获取(popUpCloseButtons.size()-1)。单击();
}
和自定义等待方法:
public List<WebElement> waitElements(WebDriver driver, int timeout, By locator) throws InterruptedException {
List<WebElement> elements = new ArrayList<>();
for (int i = 0; i < timeout; i++) {
elements = driver.findElements(locator);
if (elements.size() > 0)
break;
System.out.println("Not!");
Thread.sleep(1000);
}
return elements;
}
公共列表waitElements(WebDriver驱动程序、int timeout、按定位器)引发InterruptedException{
列表元素=新的ArrayList();
for(int i=0;i0)
打破
System.out.println(“不是!”);
睡眠(1000);
}
返回元素;
}
最佳做法是不要同时使用显式和隐式等待,请查找更多详细信息。对于popup close,您可以尝试使用JavaScript单击,或者等待
popUpClose
可单击
JavascriptExecutor js = (JavascriptExecutor) driver;
driver.findElement(sendButton).click();
List<WebElement> elements = waitElements(driver, 5, By.className("button-resultdown"));
if (elements.size() == 0){
List<WebElement> popUpCloseButtons = driver.findElements(popUpClose);
System.out.println("Popup Close Buttons size: " + popUpCloseButtons.size());
if (popUpCloseButtons.size() > 0)
js.executeScript("arguments[0].click();", popUpCloseButtons.get(popUpCloseButtons.size() - 1));
//popUpCloseButtons.get(popUpCloseButtons.size() - 1).click();
}
JavascriptExecutor js=(JavascriptExecutor)驱动程序;
driver.findElement(sendButton).单击();
List elements=waitElements(driver,5,By.className(“button resultdown”);
if(elements.size()==0){
列出popUpCloseButtons=driver.findElements(popUpClose);
System.out.println(“弹出关闭按钮大小:+popUpCloseButtons.size());
如果(popUpCloseButtons.size()>0)
js.executeScript(“参数[0]。单击();”,popUpCloseButtons.get(popUpCloseButtons.size()-1));
//获取(popUpCloseButtons.size()-1)。单击();
}
和自定义等待方法:
public List<WebElement> waitElements(WebDriver driver, int timeout, By locator) throws InterruptedException {
List<WebElement> elements = new ArrayList<>();
for (int i = 0; i < timeout; i++) {
elements = driver.findElements(locator);
if (elements.size() > 0)
break;
System.out.println("Not!");
Thread.sleep(1000);
}
return elements;
}
公共列表waitElements(WebDriver驱动程序、int timeout、按定位器)引发InterruptedException{
列表元素=新的ArrayList();
for(int i=0;i0)
打破
System.out.println(“不是!”);
睡眠(1000);
}
返回元素;
}
谢谢,但当WebDriver关闭窗口时,我如何定义“超时”值?我应该等待预定义的时间,然后单击关闭按钮,然后等待窗口消失。因此,此代码错过了第一步,等待预定义的时间(10秒)。当页面加载时,按钮是可点击的,所以它不是一个良好的状态。您可以在WebDriverWait wait=new WebDriverWait(驱动程序,10)中设置预定义的时间代码><代码>如果(elements==null)
如果没有结果,请单击关闭按钮。然后等待,直到您为显式等待设置的预定义时间invisibilityOfElementLocated
wait。如果你想点击直到弹出窗口关闭,你可以把它放在一个循环中,我也试过你的代码,但它不工作,没有任何效果。我尝试使用ExpectedConditions。invisibilityOfElementLocated也被设置为,但我在10秒后得到TimeoutException
,弹出窗口仍然打开。请检查更新的代码。还要检查DOM中是否有多个popUpClose按钮谢谢,但是我如何定义“超时”值,WebDriver何时应该关闭窗口?我应该等待预定义的时间,然后单击关闭按钮,然后等待窗口消失。因此,此代码错过了第一步,等待预定义的时间(10秒)。当页面加载时,按钮是可点击的,所以它不是一个良好的状态。您可以在WebDriverWait wait=new WebDriverWait(驱动程序,10)中设置预定义的时间代码><代码>如果(elements==null)
如果没有结果,请单击关闭按钮。然后等待,直到您为显式等待设置的预定义时间invisibilityOfElementLocated
wait。如果你想点击直到弹出窗口关闭,你可以把它放在一个循环中,我也试过你的代码,但它不工作,没有任何效果。我尝试使用ExpectedConditions。invisibilityOfElementLocated也被设置为,但我在10秒后得到TimeoutException
,弹出窗口仍然打开。请检查更新的代码。还要检查DOM中是否有多个popUpClose按钮