Selenium Webdriver не может щелкнуть модальный диалог, когда окно не находится в фокусе

#selenium

#selenium

Вопрос:

У меня открыто 2 браузера, и Selenium Webdriver может переключаться между этими двумя. Одно окно находится на переднем плане, а другое — в фоновом режиме. И в рабочем процессе в фоновом окне открывается модальный диалог, и, следовательно, webdriver не может выполнять с ним какие-либо действия. Есть ли какое-либо возможное решение, кроме вывода фонового окна на передний план? Я использую C #.

Комментарии:

1. Что вы пробовали с точки зрения кода?

Ответ №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 исключение.

Ответ №2:

Я использую приведенный ниже код

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

            }

        }