2016-09-29 4 views
0

Я запускаю тесты Selenium с помощью веб-драйвера.Как получить новое поведение в виде вкладок/окон в разных браузерах?

Когда я пытаюсь открыть новую вкладку или новое окно в браузере, поведение отличается от того, в каком браузере я тестирую.

Вот метод, который я использую. Код такой же для новой вкладки вместо нового окна, просто замените клавишу нажатой «t» вместо «n».

protected void logOutInAnotherTab() { 
    driver.findElement(By.cssSelector("body")).sendKeys(Keys.CONTROL + "n"); 
    List<String> tabs = new ArrayList<>(driver.getWindowHandles()); 
    driver.switchTo().window(tabs.get(1)); 
    PageObject.logout(driver); 
    PageUtil.waitForPageLoad(driver, 3); 
    driver.close(); 
    driver.switchTo().window(tabs.get(0)); 
} 

Предполагается открыть новую вкладку/окно, переключиться на него, перейдите выхода из системы URL (который заканчивается сеанс пользователя), затем закройте вкладку/окно (переход к исходной вкладке/окне) , позволяя тестовому примеру продолжить сеанс пользователя.

Если я делаю это для вкладок, то как Firefox, так и IE возвращают только исходную вкладку, когда я вызываю driver.getWindowHandles(), что приводит к индексу за пределами границ на следующей строке. Другими словами, новая вкладка не распознается webdriver, поэтому переход на нее не выполняется.

Если я делаю это для окон, у меня такая же проблема, но только IE страдает от этого; веб-драйвер Firefox получает оба окна просто отлично. Кроме того, IE загружает ту же страницу, что и исходное окно, вместо начальной страницы или главной страницы, что создает дополнительные проблемы.

Во всех случаях я могу заставить Chrome вести себя так, как я ожидаю.

Как я могу заставить все три из этих настольных браузеров (IE, Firefox и Chrome) вести себя одинаково, когда я имею дело с несколькими вкладками или окнами?

Или, насколько мне нужно, как открыть новую вкладку/окно во всех трех браузерах и успешно перейти к этой вкладке/окну, а затем закрыть вкладку/окно и успешно вернуться к исходному?

ответ

0

В основном я переключаю вкладки на основе названий вкладок. Следующий мой код, надеюсь, это имеет смысл.

public void SwitchTo(String tabName) { 

     String currentHandle = driver.getWindowHandle(); 
     Set<String> set = driver.getWindowHandles(); 

     for (String s : set) { 

      if (currentHandle.equals(s)) { 
       continue; 
      } 

      driver.switchTo().window(s); 

      if (driver.getTitle().equals(tabName)) { 
       break; 
      } 
     } 
    } 

Примечание: я просто предоставил свой локальный метод без инициализации драйвера, не понимаю, что «что такое драйвер?».

Если я делаю это для вкладок, как Firefox и IE возвращает только вкладку оригинал, когда я называю driver.getWindowHandles()

Как я могу видеть, если getWindowHandles только возвращает исходную вкладку, это может быть связано к версиям. См.

Firefox does not list tabs in getAllWindowHandles

+0

Это не решит мою проблему. Для IE и Firefox 'driver.getWindowHandles()' возвращает набор, содержащий только 1 элемент; оригинальная вкладка/окно. Итерация через этот набор не волшебным образом добавит другую вкладку/окно. –