Нахождение элемента LI с помощью: text с помощью watir-webdriver - PullRequest
9 голосов
/ 10 мая 2011

Я пытаюсь найти и щелкнуть элемент меню jQuery, меню определяется как несколько элементов UL, содержащих несколько элементов LI.

Использование Firefox 3.6.17 на Mac 10.5, в стандартном WATIR, который я использовал;

browser.li(:text,"Options...").click

или

browser.div(:id,"Attributes-menu").li(:text,"Copy").click

чтобы щелкнуть по пункту меню, но с помощью watir-webdriver (0.2.3) он сообщает, что элемент LI не может быть найден. Хотя я могу найти содержащий DIV и экземпляр LI, используя: class.

Ниже я привел пример HTML-меню, может кто-нибудь предложить надежный способ определения местоположения элемента LI?

<div class="ws-menu-container ws-context-menu ws-context-menu-hidden" style="top: 16px; left: 214px; " id="Attributes-menu">
<ul class="ws-context-menu"><li class="ws-context-menu-disable">&nbsp;&nbsp;&nbsp;Copy&nbsp;&nbsp;&nbsp;</li></ul>
<hr class="ws-context-menu-separator">
<ul class="ws-context-menu">
<li class="ws-context-menu-disable">&nbsp;&nbsp;&nbsp;Add...&nbsp;&nbsp;&nbsp;</li>
<li class="ws-context-menu-disable">&nbsp;&nbsp;&nbsp;Remove...&nbsp;&nbsp;&nbsp;</li></ul>
<hr class="ws-context-menu-separator">
<ul class="ws-context-menu">
<li class="ws-context-menu-disable">&nbsp;&nbsp;&nbsp;Clear Translation Flag&nbsp;&nbsp;&nbsp;</li>
<li class="ws-context-menu-disable">&nbsp;&nbsp;&nbsp;Copy from Master Language...&nbsp;&nbsp;&nbsp;</li>
<li class="ws-context-menu-disable">&nbsp;&nbsp;&nbsp;Push to Child Languages...&nbsp;&nbsp;&nbsp;</li></ul>
<hr class="ws-context-menu-separator">
<ul class="ws-context-menu">
<li class="ws-context-menu">&nbsp;&nbsp;&nbsp;Options...&nbsp;&nbsp;&nbsp;</li></ul>
<hr class="ws-context-menu-separator">
<ul class="ws-context-menu">
<li class="ws-context-menu">&nbsp;&nbsp;&nbsp;Refresh&nbsp;&nbsp;&nbsp;</li></ul>
<hr class="ws-context-menu-separator">
<ul class="ws-context-menu">
<li class="ws-context-menu">&nbsp;&nbsp;&nbsp;Help&nbsp;&nbsp;&nbsp;</li></ul></div>

Ответы [ 3 ]

20 голосов
/ 10 мая 2011

Это сработало для меня:

browser.div(:id => "Attributes-menu").li(:text => /Copy/).click
3 голосов
/ 10 мая 2011

Причина, по которой он не найден - это nbsp; s.В дополнение к решению Željko для регулярных выражений, вы сможете сделать это, добавив байты Unicode для неразрывного пробела к искомой строке, например:

browser.li(:text => "\xc2\xa0\xc2\xa0\xc2\xa0Options...\xc2\xa0\xc2\xa0\xc2\xa0")
1 голос
/ 11 мая 2011

Чтобы выполнить решение Желько, но используя строковую переменную, вам нужно создать новый экземпляр класса регулярного выражения из вашей строковой переменной

searchtext = Regexp.new(mystringvariable)
browser.div(:id => "Attributes-menu").li(:text => searchtext).click

для получения дополнительной информации см. Rdoc для класса Ruby Regexp

...