Перейти к содержимому

Фотография

Selenium WebDriver путает окна в IE


  • Авторизуйтесь для ответа в теме
Сообщений в теме: 2

#1 Dmitriy Komar

Dmitriy Komar

    Новый участник

  • Members
  • Pip
  • 12 сообщений
  • ФИО:Комар Дмитрий

Отправлено 26 июля 2011 - 13:00

Столкнулся с такой проблемой: при вызове метода driver.close() иногда закрывается не то окно, на котором находится фокус, а предыдущее.
Например открыто три окна браузера, работа идет в третьем, вызывается метод close(), но закрывается второе. При этом в VS в watch-е driver.CurrentWindowHandle
отображает правильный handle третьего окна.

Пробовал еще раз принудительно передавать фокус третьему окну непосредественно перед закрытием.
Пытался закрывать через javascript:

IJavaScriptExecutor js = driver as IJavaScriptExecutor;
js.ExecuteScript("self.close()");


Но результат одинаков - может несколько раз пройти нормально, а потом сделать ошибку. В FireFox все работает без проблем
Может кто-то уже сталкивался с подобным? Посоветуйте, пожалуйста, как решить такую проблему, или может быть какой-нибудь workaround.

P.S. Немного уточню, окна 2 и 3 являются попапами
  • 0

#2 Leoxa

Leoxa

    Новый участник

  • Members
  • Pip
  • 59 сообщений
  • ФИО:Алексей

Отправлено 26 июля 2011 - 15:22

у меня такой workaround:
1. считать хендлы всех окон
Object[] hwnd = driver.getWindowHandles().toArray();
2. обойти в цикле все хендлы
driver.switchTo().window(hwnd[i].toString());
3. найти известное свойство нужного окна и закрыть окно, например:
if (driver.getCurrentUrl().contains("www.close-me.com")) driver.close();

  • 0

#3 Dmitriy Komar

Dmitriy Komar

    Новый участник

  • Members
  • Pip
  • 12 сообщений
  • ФИО:Комар Дмитрий

Отправлено 27 июля 2011 - 12:30

у меня такой workaround:
1. считать хендлы всех окон

Object[] hwnd = driver.getWindowHandles().toArray();
2. обойти в цикле все хендлы
driver.switchTo().window(hwnd[i].toString());
3. найти известное свойство нужного окна и закрыть окно, например:
if (driver.getCurrentUrl().contains("www.close-me.com")) driver.close();


Не помогло. Тут видим какой-то косяк именнно в фокусировке на IE.
Решил проблему так:
string tempUrl = driver.Url;

                Process[] processes = Process.GetProcessesByName("iexplore");

                foreach (Process p in processes)
                {
                    if (p.MainWindowTitle.Contains("pager.offset"))
                        p.CloseMainWindow();
                }

  • 0


Количество пользователей, читающих эту тему: 1

0 пользователей, 1 гостей, 0 анонимных