Можем ли мы перейти на другую страницу при выполнении цикла foreach? - PullRequest
0 голосов
/ 25 августа 2018

На странице есть Таблица, мне нужно извлекать информацию построчно.Это обрабатывается для каждого.Выполнение на той же странице для получения информации работает нормально.


Но можем ли мы обработать страницу сведений о конкретной строке?Здесь «Тест 1» имеет свою страницу с подробностями.Есть некоторые операции, которые необходимо выполнить на странице с подробностямиКак мы можем управлять этим и вернуться к фактическому выполнению.

На данный момент я имею дело с циклом for-each и получаю исключение StaleElementReferenceException, которое является правильным, поскольку webElement потерял свой фактический ListElement<WebElement>

* 1011.*

Если есть какой-либо способ, пожалуйста, предложите.Благодарю.

Ответы [ 3 ]

0 голосов
/ 25 августа 2018

Я могу придумать два сценария:

  1. Нажав на ссылку, например, Test1 открывает новую вкладку:

    • В этом случае вы можете просто переключиться на новую вкладку внутри цикла, завершить свою работу на этой вкладке и, наконец, закрыть вторую вкладку / переключиться на первую вкладку, прежде чем переходить к следующему выводу. Это также не должно вызывать StaleElementException.
  2. Нажав на ссылку, например, Test1 перенаправляет на другой URL в той же вкладке:

    • Для каждой итерации цикла нажимайте на целевую ссылку, выполняйте некоторые операции на новой странице. Прежде чем продолжить следующую итерацию, снова перейдите на страницу, содержащую вашу таблицу, и снова найдите все элементы строки. Теперь для следующей итерации вы не получите StaleElementException. Вы захотите использовать цикл for, чтобы можно было поддерживать индекс снаружи вместо варианта foreach.

findList = driver.findElements (By.xpath ("// a [@class = '*****']))

Я бы порекомендовал первый вариант, так как он был бы более чистым, и вы можете выполнить Shift + клик по вашей ссылке, например. Test1, чтобы заставить его открыться в новой вкладке вместо перенаправления на той же странице. Вы можете выполнить Shift + клик, используя « Actions api », доступный в Selenium.

0 голосов
/ 25 августа 2018

Вы можете сделать что-то вроде этого:

List<WebElement> findList = driver.findElements(By.xpath("//a[@class='*****']));
for(int i = 1 ; i<=findList.size() ; i++){

   driver.findElement(By.xpath("(//a[@class='***'])[" + i + "]")).click();
   // extract some data from next page which is invoked by clicking on Test1 hyperlink.
}  

таким образом каждый раз, когда вы ищете //a[@class='***'][i] веб-элемент i, начиная с 1 и до конечной точки.

PS: Вам нужно проверить это в devtool //a[@class='***'][1], независимо от того, указывает он гиперссылку Test1 или нет.

Надеюсь, это поможет.

0 голосов
/ 25 августа 2018

Попробуйте собрать URL, чтобы детализировать страницы всех, а затем открыть их.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...