尝试切换到新窗口选项卡,然后从下拉列表中选择项目无效..
public static void handleNewTabWindow() {
driver.findElement(By.xpath(".//img[@src='/images/buttons/gl_upload.gif']")).click();
String Parent_Window = driver.getWindowHandle();
for (String Child_Window : driver.getWindowHandles()) {
driver.switchTo().window(Child_Window);
WebElement dropdown = getWhenVisible(By.xpath(".//select[@name='UPLOAD_ORG_ID']"));
dropdown.click();
getWhenVisible(By.xpath(".//option[contains(text(), 'CI Borrower')]")).click();
}
driver.switchTo().window(Parent_Window);
driver.close();
}
答案 0 :(得分:0)
您必须等到屏幕上出现新窗口才能切换到它。您的代码在点击按钮后立即尝试切换,在几毫秒内 - 浏览器不是那么快,您必须等待几秒钟左右。
一个不太优雅,但快速的解决方案是在这里引入一个固定的Thread.sleep( 2000 );
:
driver.findElement(By.xpath(".//img[@src='/images/buttons/gl_upload.gif']")).click();
Thread.sleep( 2000 );
String Parent_Window = driver.getWindowHandle();
但这并不能很好地发挥作用。
更好的解决方案是实现一种方法,该方法将等到屏幕上出现新窗口(但不超过某个固定超时 - 例如30-60秒)。例如,我们项目中最常用的方法之一是等待具有给定标题的窗口的方法,如下所示(代码框架):
void waitForWindowWithTitleAndSwitchToIt( String windowTitle, int timeoutInSeconds ){
....
while( timeout-not-expired ){
handles = driver.getWindowHandles():
for( String handle: handles ){
driver.switchTo.window( handle );
if( driver.getTitle().contains( windowTitle ) ){
// found a window with a given title
return;
}
}
sleep( for a 1-2 seconds );
// and try again
}
throw new TimeoutException(
String.format("A browser window named %s doesn't appear on the screen", windowTitle )
);
}
我们在项目中实现了几个这样的方法,它们使用不同的标准等待一个新窗口:等待具有给定精确标题的窗口,对于包含给定子字符串的标题的窗口,对于一个窗口,页面源中的给定字符串,用于在URL中具有给定(子)字符串的窗口等。