2016-01-20 2 views
0

Я пытаюсь получить значение атрибута HREF, но всегда он говорит о некорректном Xpath.Selenium говорит недействительный локатор xpath

HTML код:

enter image description here

Я пытаюсь код:

 WebElement Link = driver.findElement(By.xpath("//table[contains(@class,'display')]/thead/tbody/tr/td/a")); 
    System.out.println(Link.getAttribute("href")); 

Я попробовал много, но ни один XPath из них не работал.

+2

1), если она не будет: '// таблица [содержит (@ класс, 'дисплей')]/TBODY/тр/тд/a'? 2) Могут быть другие элементы, которые соответствуют этому выражению, вы уверены, что у вас есть правильный элемент? 3) Кто говорит _incorrect Xpath_ и как (т. Е. Какие-либо подробности об ошибке)? 4) Пожалуйста, используйте код, в котором вы пытаетесь получить значение из атрибута href. –

+1

Опубликовать HTML пожалуйста. – Newcomer

+0

Я согласен с предыдущими комментаторами, вот краткий отчет о том, что они сказали: http://stackoverflow.com/help/mcve. –

ответ

2

Это должно работать:

WebElement Link = driver.findElement(By.xpath("//table[contains(@class,'display')]/tbody/tr/td/a")); 

Объяснение: tbody не вложен в thead.

Обратите внимание, что выражение пути, подобное этому, может возвращать набор из нескольких узлов в порядке документа. Метод findElement возвращает только первый результирующий узел. Итак: если элемент a, который вы ищете, уже не первый в этой таблице, выражение пути прерывается.

Если HREF уникален, то, как это было бы менее подвержен ошибкам:

WebElement Link = driver.findElement(By.xpath("//table[contains(@class,'display')]//a[@href='/admin/client/product_overrides/edit/242625']")); 
+0

Как первое выражение зависит от порядка строк? Как я вижу, вы хотели сказать, что первое выражение зависит от неявного предположения, что первый узел в наборе результатов будет нужен, так как 'findElement' возвращает только первый результат. –

+0

@ MathiasMüller Да, вот что я имел в виду. Если код страницы изменяется, и какой-то другой элемент 'a' окажется первым, который появится в теле таблицы, тест может завершиться неудачей. Не стесняйтесь редактировать ответ, чтобы указать его. –

+0

Отредактировано с вашего разрешения - и поддерживается без вашего разрешения :-). –

Смежные вопросы