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

Фотография

Как из списка ссылок выбрать нужную и открыть её в новой вкладке


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

#1 zena

zena

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

  • Members
  • Pip
  • 3 сообщений

Отправлено 17 октября 2017 - 12:08

Здравствуйте. Автоматизацией занимаюсь всего несколько недель, прошу тапками не кидаться.
 
Цель: из списка ссылок на странице (допустим, https://en.wikipedia...Apple_cultivars) открыть все ссылки на букву А, в имени которых есть слово "apple".
Что получается у меня:

 List<WebElement> linkList = driver.findElements(By.xpath("//*[@id=\"mw-pages\"]/div/div/div[2]"));

            for (int i = 0; i < linkList.size(); i++) {

            System.out.println(linkList.get(i).getText());
            WebElement page = driver.findElement(By.xpath("//a[contains(text(), 'apple')]"));
            page.sendKeys(Keys.CONTROL, Keys.SHIFT , Keys.RETURN);
          
            }

Как результат: открывается страница со ссылками на сорта яблонь, после открывается первая ссылка со словом "apple". Тест завершается успехом.

Я так понимаю, что проблема в linkList.size() и вместо него нужно использовать другое значение.

Собственно вопрос: как подсчитать количество ссылок для цикла?


  • 0

#2 user12

user12

    Специалист

  • Members
  • PipPipPipPipPip
  • 894 сообщений
  • ФИО:Виктор
  • Город:Минск


Отправлено 17 октября 2017 - 12:47

Все неверно

//*[@id='mw-pages']//div[@class='mw-category-group']/h3[text()='A']/../ul/li/a[contains(text(), 'apple')]

Этот xpath находит все ссылки на букву A, и содержат текст apple.

 

Твой xpath "//*[@id=\"mw-pages\"]/div/div/div[2]" вообще не понятно, что находит, его длина 1

 

И потом просто в цикле открыть КАЖДУЮ ссылку в новой вкладке


  • 0

#3 Little_CJIOH

Little_CJIOH

    Профессионал

  • Members
  • PipPipPipPipPipPip
  • 1 515 сообщений
  • ФИО:Власкин Павел
  • Город:Санкт-Петербург


Отправлено 17 октября 2017 - 12:49

Опишите для начала что каждая строчка вашего кода делает и зачем.
Проблема либо в том, что вы не понимаете как сделать то что вам надо, либо не понимаете что команды делают.
  • 0

#4 zena

zena

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

  • Members
  • Pip
  • 3 сообщений

Отправлено 17 октября 2017 - 13:11

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

1- формируем список ссылок по xpath (который, как я понимаю, неверный)

2- создаем цикл от первой ссылки до linkList.size()(значение которого должно быть = кол-ву ссылок, но равно 1)

3- выводим список ссылок

4- находим совпадения в именах ссылок со словом "apple"

5- открываем новую вкладку 

 

Спасибо, user12. Буду дальше изучать.


  • 0

#5 Little_CJIOH

Little_CJIOH

    Профессионал

  • Members
  • PipPipPipPipPipPip
  • 1 515 сообщений
  • ФИО:Власкин Павел
  • Город:Санкт-Петербург


Отправлено 17 октября 2017 - 13:34

1 - да, неверный, в чем именно я вам не скажу, я не эксперт. user12, кстати, дал xpath очень похожий на правильный.
2 - оно равно размеру того списка, который вы получили на шаге 1.
3 - ок, для дебага полезно, кстати, что оно выводит в тот единственный раз когда выполняется?
4 - ой ли? вы на текущей странице ищите элемент по фиксированному xpath, вообще никак не опираясь на список который делали в шаге 1, то есть, даже если итерации в цикле будет две, результат будет один, ну или два, но одинаковых.
5 - если я что-то в чем-то понимаю, то shift там лишний, он переключит фокус на новую страницу, и если на 2-й итерации цикла вы попробуете что-то делать с текущей страницей, то там будет совсем не та-же страница, что на 1-й итерации.
  • 0

#6 zena

zena

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

  • Members
  • Pip
  • 3 сообщений

Отправлено 17 октября 2017 - 13:48

1 - да, неверный, в чем именно я вам не скажу, я не эксперт. user12, кстати, дал xpath очень похожий на правильный.
2 - оно равно размеру того списка, который вы получили на шаге 1.
3 - ок, для дебага полезно, кстати, что оно выводит в тот единственный раз когда выполняется?
4 - ой ли? вы на текущей странице ищите элемент по фиксированному xpath, вообще никак не опираясь на список который делали в шаге 1, то есть, даже если итерации в цикле будет две, результат будет один, ну или два, но одинаковых.
5 - если я что-то в чем-то понимаю, то shift там лишний, он переключит фокус на новую страницу, и если на 2-й итерации цикла вы попробуете что-то делать с текущей страницей, то там будет совсем не та-же страница, что на 1-й итерации.

 

3-я строчка выводит весь список ссылок на букву А (xpath искался в стандартном devtools, CTRL+SHIFT+C ->клик на элемент->пкм на строке кода->copy->xpath )

4-я строка уже понимаю, что бред:)

спасибо за пояснения по 5-ой строке.


  • 0


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

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