当窗口未处于焦点时,Selenium Webdriver无法单击模式对话框

当窗口未处于焦点时,Selenium Webdriver无法单击模式对话框,selenium,Selenium,我打开了两个浏览器,SeleniumWebDriver可以在这两个浏览器之间切换。一个窗口位于前景,另一个窗口位于背景。在工作流中,后台窗口中会打开一个模式对话框,因此webdriver无法对其执行任何操作。除了将背景窗口置于前景之外,还有什么可能的解决方案吗? 我正在使用C#.循环浏览窗口句柄,并检查是否出现模态对话框 string current_window = driver.CurrentWindowHandle; foreach (string window in driver.Win

我打开了两个浏览器,SeleniumWebDriver可以在这两个浏览器之间切换。一个窗口位于前景,另一个窗口位于背景。在工作流中,后台窗口中会打开一个模式对话框,因此webdriver无法对其执行任何操作。除了将背景窗口置于前景之外,还有什么可能的解决方案吗?
我正在使用C#.

循环浏览窗口句柄,并检查是否出现模态对话框

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;
    }
}
根据你所说的,这应该行得通。如果你找不到模态,那么可能有一个不同的问题,不仅仅是窗口没有聚焦。如果您担心其他错误,那么我会说,只捕获捕获捕获中的特定错误,让其他所有错误都浮起
ElementNotFound
异常。

我使用下面的代码

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();

            }

        }

您在代码方面做了哪些尝试?