2014-01-19 3 views
-1

В настоящее время я автоматизирую приложение на платформе IBM Cognos с использованием селена + огурец + Internet Explorer и сталкивается с некоторыми проблемами. Мне нужна экспертная помощь этой группы по этим вопросам.Selenium - getWindowHandles() возвращает значение 1 независимо от числа открытых браузеров

Описание проблемы - при нажатии на ссылку на странице открывается новый браузер. В идеале метод getWindowHandles() возвращает правильный счет браузера, открытый WebDriver. Мы переключаемся на второй браузер с использованием свойства дескриптора окна, дальнейшие действия будут выполняться во втором браузере. GetWindowHandles возвращает значение 1 независимо от количества браузеров, открытых WebDriver. Я попытался следующие методы -

  1. Нажмите кнопку() на ссылку & пытавшихся getWindowHandles()
  2. Keys.Enter на ссылку & getWindowHandles()
  3. SendKeys («\ 0») по ссылке & getWindowHandles()
  4. MouseHover по ссылке, нажмите на ссылку & getWindowHandles
  5. Двойной щелчок по ссылке & getWindowHandles
  6. Открыт Новая вкладка с помощью SendKeys (keys.control +»T»), переходите к URL & getWindowHandles()
  7. Открыт новое окно браузера с помощью SendKeys (keys.control +»N»), переходите к URL & getWindowHandles()

среда используется - Selenium WebDriver - 2.39.0 IEDriverServer.exe - Win32_2.39.0 Windows 7 Internet Explorer 8.0

Примечание - она ​​работает отлично на Firefox, этот вопрос Хаппа только для IE.

+0

Вы пытались подождать несколько секунд, прежде чем получать ручки окна? Возможно, что getWindowHandles вызывается еще до того, как создается окно браузера. – Buddha

+0

Да, я пробовал с добавлением wait, no luck – Buddha

ответ

-2

Можете ли вы сказать, если щелчок по ссылке открывает новую вкладку или новое окно? Существует разница между открытием ссылки в новом окне и ее открытием на новой вкладке.

Случай 1:
В случае, если есть несколько окон, driver.getWindowHandles() возвращает список ручки и, следовательно, размер списка> 1. Ниже кода демонстрирует переключение между окнами:

//Get the current window handle 
String windowHandle = driver.getWindowHandle(); 

//Get the list of window handles 
ArrayList tabs = new ArrayList (driver.getWindowHandles()); 
System.out.println(tabs.size()); 
//Use the list of window handles to switch between windows 
driver.switchTo().window(tabs.get(0)); 

//Switch back to original window 
driver.switchTo().window(mainWindowHandle); 

случай 2:
В случае, если есть несколько вкладок в одном окне, то есть только одна оконная ручка. Следовательно, переключение между ручками окна удерживает элемент управления на той же вкладке.
В этом случае с помощью Ctrl + \ t (Ctrl + Tab) для переключения между вкладками работал на меня.

//Open a new tab using Ctrl + t 
driver.findElement(By.cssSelector("body")).sendKeys(Keys.CONTROL +"t"); 
//Switch between tabs using Ctrl + \t 
driver.findElement(By.cssSelector("body")).sendKeys(Keys.CONTROL +"\t"); 

Подробный пример кода для переключения между вкладками в одном окне браузера можно найти здесь:
http://design-interviews.blogspot.com/2014/11/switching-between-tabs-in-same-browser-window.html

+0

Этот вопрос не о переключении окон, о том, что количество возвращаемых имен окон неожиданно в IE. –

+0

@Sourabh, как вы можете видеть здесь: http: //stackoverflow.com/questions/34427390/selenium-getting-data-from-another-tab-instead-of-active-one/34427979#34427979 (ctrl + tab) измените вкладку, но не фокусируйтесь на ней. – newway

0

Я столкнулся с той же проблемой, но добавив ниже возможности решить мою проблему.

ie.forceCreateProcessApi 

Вышеуказанная возможность должна быть добавлена ​​в InternetExplorer. Надеюсь, он также может решить вашу проблему. Возможно, вам также понадобится изменить редактор reg, чтобы это работало.