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