Поиск местоположения xpath в новом окне, открытом после нажатия.Использование Java и селена - PullRequest
0 голосов
/ 07 февраля 2019

Я практикую тестирование автоматизации пользовательского интерфейса с использованием Java и селена.Моя цель - найти веб-элементы максимально эффективным способом.

Код ниже - это то, что я использую, чтобы найти местоположение (xpath) и щелкнуть активную ссылку после видимости.

wait.until(ExpectedConditions.visibilityOfElementLocated(By.xpath(path))).click();

После нажатия я должен найти другой веб-элемент нановая сценаРегулярно, если веб-страница приводит меня к следующей сцене в том же окне, этот код полезен.

Когда щелчок вызывает открытие нового окна, мой код не срабатывает из-за «TimeoutException».Я пытался найти способы, но веб-страница, на которой я работаю, случайно меняет способ.Несколько раз следующая страница появляется в том же окне, а иногда открывается новое окно.

Есть ли способ решить проблему такого типа?

Ответы [ 2 ]

0 голосов
/ 12 февраля 2019

Вы должны использовать 'обработчик' для управления окнами.

В некоторых веб-приложениях есть много фреймов или несколько окон.Selenium WebDriver назначает буквенно-цифровой идентификатор каждому окну, как только создается экземпляр объекта WebDriver.Этот уникальный буквенно-цифровой идентификатор называется дескриптором окна.Selenium использует этот уникальный идентификатор для переключения управления между несколькими окнами.Проще говоря, каждое уникальное окно имеет уникальный идентификатор, поэтому Selenium может различать, когда он переключает элементы управления из одного окна в другое.

Команда GetWindowHandle Цель: получить дескриптор окнатекущего окна.

String  handle= driver.getWindowHandle();//Return a string of alphanumeric window handle

Команда GetWindowHandles Назначение: получить дескриптор окна всех текущих окон.

Set<String> handle= driver.getWindowHandles();//Return a set of window handle

Команда SwitchTo Window Назначение: WebDriverподдерживает перемещение между именованными окнами с помощью метода «switchTo».

 driver.switchTo().window("windowName");

или

В качестве альтернативы, вы можете передать «дескриптор окна» в «switchTo ()».window () ».Зная это, можно перебирать каждое открытое окно следующим образом:

for (String handle : driver.getWindowHandles()) {

driver.switchTo().window(handle);}

или

Переключение между окнами с помощью итераторов:

 driver.findElement(By.id(“id of the link which opens new window”)).click();

 //wait till two windows are not opened

 waitForNumberofWindowsToEqual(2);//this method is for wait

 Set handles = driver.getWindowHandles();

 firstWinHandle = driver.getWindowHandle(); handles.remove(firstWinHandle);

 String winHandle=handles.iterator().next();

 if (winHandle!=firstWinHandle){

 //To retrieve the handle of second window, extracting the handle which does not match to first window handle

 secondWinHandle=winHandle; //Storing handle of second window handle

//Switch control to new window

 driver.switchTo().window(secondWinHandle);

Подробности здесь: https://www.toolsqa.com/selenium-webdriver/switch-commands/

0 голосов
/ 08 февраля 2019

В вашем приложении должны быть некоторые условия, заставляющие его открывать новую страницу в том же или другом окне.

Первая задача - определить это условие. Поскольку ваш веб-элемент не виден, онвыдает исключение после ожидания предварительно сконфигурированного времени, указанного в явном ожидании.

Секунда - это тогда

  1. Если это то же самое окно, оно будет немного простым, так как будетнет окна для переключения на. Вы можете использовать явное ожидание, как мы делали с первым элементом.
  2. Если оно открывается в новом окне, попробуйте переключиться на это окно и затем выполнить свое действие.Selenium оказывает эту поддержку.Для этого см. Следующую ссылку: Ссылка
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...