2015-01-16 3 views
1

Я работаю с веб-страницей, которая нуждается в некоторой автоматизации и неспособной взаимодействовать с определенными элементами из-за их структуры. Краткий пример:Поиск элемента в Selenium с пользовательским значением

<ul> 
<li data-title="Search" data-action="search"> 
<li class="disabled" data-title="Ticket Grid" data-action="ticket-grid"> 
<li data-title="Create Ticket" data-action="create"> 
<li data-title="Settings" data-action="settings"> 
</ul> 

Я в курсе всех стратегий локатора, как идентификатор и имя, перечисленных здесь: http://selenium-python.readthedocs.org/en/latest/locating-elements.html

Однако, есть способ указать найти что-то по пользовательскому значению, как в этом примере " данное название "?

ответ

4

Вы можете использовать CSS, чтобы выбрать любой атрибут, это то, что формула выглядит следующим образом:

element[attribute(*|^|$|~)='value'] 

За ваш пример, это было бы:

li[data-title='Ticket Grid'] 

(источник http://ddavison.io/css/2014/02/18/effective-css-selectors.html)

+0

Спасибо, это похоже на лучший способ! – GatesOfDelirium

+0

@GatesOfDelirium: Пожалуйста, отметьте его как ответ и/или увеличьте его, если это вам помогло. Это поможет другим, кто сталкивается с подобной проблемой .. Спасибо .. :) – Subh

0

Вы можете использовать:

"//li[@data-title='Ticket Grid']" 
+0

Это работает, но кажется, что CSS подход может обрабатывать глубже вложенные элементы лучше. – GatesOfDelirium

2

Если есть несколько возможностей это также знать, следующий вариант

from selenium.webdriver import Firefox 

driver = Firefox() 
driver.get(<your_html>) 

li_list = driver.find_elements_by_tag_name('li') 
for li in li_list: 
    if li.get_attribute('data-title') == '<wanted_value>': 
     <do_your_thing> 
+0

Хорошо для нескольких возможностей –

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