Получить список ссылок через XPath

kirsa

Client
Регистрация
06.12.2016
Сообщения
50
Благодарностей
9
Баллы
8
Добрый день.
Разбираюсь с применением Xpath. В верхней части страницы http://www.bing.com/ есть семь ссылок. Если их посмотреть через FirePath, то они выглядят так:
html/body/table/tbody/tr/td/div/div[3]/div/ul/li[1]/a
html/body/table/tbody/tr/td/div/div[3]/div/ul/li[2]/a
html/body/table/tbody/tr/td/div/div[3]/div/ul/li[3]/a
html/body/table/tbody/tr/td/div/div[3]/div/ul/li[4]/a
html/body/table/tbody/tr/td/div/div[3]/div/ul/li[6]/a
html/body/table/tbody/tr/td/div/div[3]/div/ul/li[7]/a
html/body/table/tbody/tr/td/div/div[3]/div/ul/li[8]/a
Преобразуем к виду
Код:
/html/body/table/tbody/tr/td/div/div[3]/div/ul/li[@id]/a
или
Код:
//div[3]/div/ul/li[@id]/a
или
Код:
//div[3]/div/ul/li/a
Все три варианта конструкций работают в FirePath и находят семь совпадений:
Но при вставке этих конструкций в метод FindElementsByXPath ссылки не находятся.
Код:
var links = instance.ActiveTab.FindElementsByXPath("/html/body/table/tbody/tr/td/div/div[3]/div/ul/li[@id]/a");
// var links = instance.ActiveTab.FindElementsByXPath("//div[3]/div/ul/li[@id]/a");
// var links = instance.ActiveTab.FindElementsByXPath("//div[3]/div/ul/li/a");
if (links.Count==0)    throw new Exception("ERROR");
// Количество ссылок
project.Variables["linksCount"].Value = Convert.ToString(links.Count);
// Обходим все элементы из коллекции
foreach (var link in links.Elements)
{
    // Получаем и записываем в переменную ссылку из элемента
    project.Variables["link"].Value = link.GetAttribute("href");
    // Записываем переменную в список
    project.Lists["links"].Add(project.Variables["link"].Value);
}
Глядя на эти ссылки в дереве элементов видно, что у некоторых тэгов есть атрибут id. И, если с учетом этого изменить конструкцию на такую:
Код:
/html/body/table[@id]/tbody/tr/td[@id]/div[@id]/div[@id]/div/ul[@id]/li[@id]/a
получим список из искомых ссылок. Вопрос, почему в PM не работают конструкции, которые работают в FirePath? Может синтаксис в PM как-то отличается от FirePath?
 

budora

Client
Регистрация
13.08.2012
Сообщения
831
Благодарностей
554
Баллы
93
Добрый день.
Разбираюсь с применением Xpath. В верхней части страницы http://www.bing.com/ есть семь ссылок. Если их посмотреть через FirePath, то они выглядят так:
html/body/table/tbody/tr/td/div/div[3]/div/ul/li[1]/a
html/body/table/tbody/tr/td/div/div[3]/div/ul/li[2]/a
html/body/table/tbody/tr/td/div/div[3]/div/ul/li[3]/a
html/body/table/tbody/tr/td/div/div[3]/div/ul/li[4]/a
html/body/table/tbody/tr/td/div/div[3]/div/ul/li[6]/a
html/body/table/tbody/tr/td/div/div[3]/div/ul/li[7]/a
html/body/table/tbody/tr/td/div/div[3]/div/ul/li[8]/a
Если смотреть не абсолютный путь, а относительный. Получите 7 адресов и всё будет работать.
 
  • Спасибо
Реакции: kirsa

kirsa

Client
Регистрация
06.12.2016
Сообщения
50
Благодарностей
9
Баллы
8
Сбила фраза в одном руководстве, что

С точкой заработали все конструкции с относительным путем. Спасибо.
 

Кто просматривает тему: (Всего: 1, Пользователи: 0, Гости: 1)