t.me/atinfo_chat Telegram группа по автоматизации тестирования

Как быть если функция getAllLinks() возвращает пустой массив строк?


(Mykhailo Poliarush) #1

Проблема: На странице ссылки изменяются динамически. Соответственно, надо проходится по всем ссылкам и искать нужные, ну и выполнять дальнейшие дейсвтия. Есть такая хорошая функция, как getAllLinks(), которая возвращает список (массив) id или name каждой ссылки, иначе массив будет пустой. НО, проблема, что в том, в ссылках НЕТУ id или name

Референс на описания данной функции говорит: getAllLinks() method "Returns the IDs of all links on the page. If a given link has no ID, it will appear as "" in this array".

Соответственно, как быть в данной ситуации?


(Mykhailo Poliarush) #2

Вроде бы решение найдено, но я есть неточности. Собстветвено сам код.

{syntaxhighlighter brush: bash;fontsize: 100; first-line: 1; }String locator = "//*/following::a"; for (int i = 1; i < browser.getXpathCount("//a").intValue(); i++) { System.out.println("link #" + i); System.out.println("href ="+ browser.getAttribute(locator + "[" + i + "]/@href")); System.out.println("text = "+ browser.getText(locator + "[" + i + "]")); }{/syntaxhighlighter}

Только вот есть несколько моментов:

  1. Если искать линки по через, вот такой //a выражение, то получается не предсказуемое поведение. Т.е. //a[2] - не означает, что мы получим второй элемент по счету. Потому, я использовал //*/following::a
  2. Когда я пытаюсь взять общее количество элементов по //*/following::a, то Selenium зависает ?! Не могу понять почему. Потому, я использовал //a
  3. Это рабочий вариант, но работает, что-то очень медленно, что может быть неприемлимо в условиях, где большое множество тестов.

Может быть надо было использовать DOM вместо XPath?


(Mykhailo Poliarush) #3

Я обновился до последний версии Selenium Server и следующий код работает нормальнно.

{syntaxhighlighter brush: java;fontsize: 100; first-line: 1; }String locator = "xpath=(//a)"; for (int i = 1; i < browser.getXpathCount("//a").intValue(); i++) { System.out.println("link #" + i); System.out.println("href ="+ browser.getAttribute(locator + "[" + i + "]/@href")); System.out.println("text = "+ browser.getText(locator + "[" + i + "]")); }{/syntaxhighlighter}

Изменения только в локаторе. Если использовать, это выражение xpath=(//a), то все элементы будут выбиркаться по порядку.