2014-02-16 3 views
1

Я работаю с веб-сайтом «Table styleled», используя selenium-webdriver.Как найти ближайшего родителя по tag_name с помощью selenium

Существует множество гнезд таблиц и нет id или name атрибутов из них.

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

driver = Selenimum::WebDriver.for :firefox 
element = driver.find_element(:xpath, 
    "//font[@color='#FFFFFF' and text()='some probably unique text']") 

из этого HTML.

<table><tbody> 
... 
<table><tbody><tr><td><font color="#FFFFFF"> 
    some probably unique text 
</font></td></tr></table> 
... 
</tbody></table> 

Я хочу, чтобы получить внутри table элемента из font элемента, который я получил в коде выше. Я знаю, что могу получить element.find_element(:xpath, "../../../.."), но это немного отвратительно.

Я хочу указать имя тега как минимум element.find_element(:xpath, "../*/table").

Есть ли способ сделать это?

ответ

1

Вы можете использовать оси XPath ancestor.

element = driver.find_element(:xpath, ".//font[@color='#FFFFFF' and text()='some probably unique text']/ancestor::table") 

Или вложенная XPath: не для вложенных таблиц ситуации, как ваша

element = driver.find_element(:xpath, ".//table[.//font[@color='#FFFFFF' and text()='some probably unique text']]") 
+0

Первый это все правильно, но добавить '(...) [1]' вокруг него, чтобы принести _nearest_ предок. Второй просто извлекает их все и не решает проблему. –

+0

@JensErat: Да, вы правы, я думал, что таблицы параллельны, но они вложены. –

+0

Просто понял, что было бы разумнее удалить скобку, в случае обнаружения нескольких таблиц для нескольких элементов шрифта; таким образом, возвратите первого предка таблицы для каждого элемента шрифта. –

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