当窗口未对焦时,Selenium Webdriver无法单击模态对话框

时间:2014-06-30 04:55:45

标签: selenium

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

2 个答案:

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

            }

        }