我打开了2个浏览器,Selenium Webdriver可以在这两个浏览器之间切换。一个窗口在前景中,另一个窗口在后台。在工作流程中,模式对话框在后台窗口中打开,因此webdriver无法对其执行任何操作。除了让背景窗口进入前景之外,还有什么可能的解决方案吗? 我正在使用C#。
答案 0 :(得分:1)
循环浏览窗口句柄并检查是否显示模式对话框。
string current_window = driver.CurrentWindowHandle;
foreach (string window in driver.WindowHandles)
{
driver.SwitchTo().Window(window);
if (GetModal())
{
//do actions here
break;
}
}
driver.SwitchTo().Window(current_window); //To put you back where you started.
private bool GetModal()
{
Try
{
IWebElement modal = driver.FindElementByXPath("");
return true;
}
catch
{
return false;
}
}
根据你所说的,这应该有效。如果你找不到模态,那么可能有一个不同的问题,而不仅仅是窗口没有聚焦。如果您担心其他错误,那么我会说只捕获catch中的特定错误,并让其他所有错误浮动ElementNotFound
异常。
答案 1 :(得分:0)
我正在使用以下代码
try{
//your code which will generate Modal Dialog
} catch (Exception e) {
if (e.getMessage().contains("Modal dialog present")) {//For Handling modal dialog in firefox
(new Robot()).keyPress(java.awt.event.KeyEvent.VK_ESCAPE);
(new Robot()).keyRelease(java.awt.event.KeyEvent.VK_ESCAPE);
}else if(e.getMessage().contains("unexpected alert open")){//For Handling modal dialog in chrome
driver.switchTo().alert().accept();
}
}