我不是在谈论像警报、确认或提示对话框这样的弹出窗口。如果我在应用程序中单击按钮,将弹出弹出窗口。我无法切换WebDriver到弹出窗口。
我尝试使用getWindowHandles(),但它只返回主窗口句柄。
我也尝试过switchTo.window("windowname") ,但它没有起作用。
我不是在谈论像警报、确认或提示对话框这样的弹出窗口。如果我在应用程序中单击按钮,将弹出弹出窗口。我无法切换WebDriver到弹出窗口。
我尝试使用getWindowHandles(),但它只返回主窗口句柄。
我也尝试过switchTo.window("windowname") ,但它没有起作用。
driver.switchTo().frame()
上的操作,然后对要操作的元素执行操作。完成操作后,这很可能会将您带回主页。使用driver.switchTo().defaultContent()
将焦点返回到主页。
此SO问题将有所帮助。//handle of the master window before clicking the link
String master = driver.getWindowHandle();
driver.findElement(By.linkText("Click me")).click();
//logic for waiting for the popup, checking the size to become greater than 1 or breaking after sometime to avoid the infinite loop.
int timeCount = 1;
do
{
driver.getWindowHandles();
Thread.sleep(200);
timeCount++;
if ( timeCount > 50 )
{
break;
}
}
while ( driver.getWindowHandles().size == 1 );
//Assigning the handles to a set
Set<String> handles = driver.getWindowHandles();
//Switching to the popup window.
for ( String handle : handles )
{
if(!handle.equals(master))
{
driver.switchTo().window(handle);
}
}
根据webdriver,这个问题在2.16版本中已经修复,但仍然无法正常工作支持window.ShowmodalDialog。
您可以使用Java Robot类来处理这种情况。
示例:
Wait(5000); // Wait for model pop,
int keyInput[] =
{
KeyEvent.VK_S, KeyEvent.VK_E, KeyEvent.VK_L, KeyEvent.VK_E,
KeyEvent.VK_N, KeyEvent.VK_I, KeyEvent.VK_U, KeyEvent.VK_M,
};
Robot robot = new Robot();
robot.keyPress(KeyEvent.VK_TAB);
robot.keyPress(KeyEvent.VK_TAB);
for (int i = 0; i < keyInput.length; i++)
{
robot.keyPress(keyInput[i]);
robot.delay(100);
}
robot.delay(1000);
robot.keyPress(KeyEvent.VK_TAB);
robot.delay(1000);
robot.keyPress(KeyEvent.VK_TAB);
robot.delay(1000);
robot.keyPress(KeyEvent.VK_TAB);
robot.delay(1000);
robot.keyPress(KeyEvent.VK_ENTER); // Save Btn
事件之间的延迟是必要的,否则您将错过这些事件。
假设你在谈论一个 JavaScript 弹窗。
final Alert a = driver.switchTo().alert();
a.accept();
或者
和