如何提取包含某些已知文本的元素

时间:2015-01-21 21:54:56

标签: ruby selenium-webdriver watir watir-webdriver

我正在使用Watir-Webdriver。

我知道页面上有特定的文字,即:“名字是必需的”

browser.text.include("First Name is required")返回true,这很好。

使用Watir-Webdriver是否有一些方法可以附加到browser.text.include("First Name is required")的末尾,它将返回包含该特定文本的css / html?

此文本字段上的inspect元素返回:

<h3 class="split-sm"></h3>
<div class="input-group">
    <div class="input-container input-left-half round">
        <div class="validate status-invalid"></div>
        <input id="member_first_name" type="text" name="member_first_name"></input>
        <label class="error" for="member_first_name">
            <span class="label-norm">
                First Name
            </span>
            <span id="member_first_name-error" class="label-error">
                is required
            </span>
        </label>
    </div>

1 个答案:

答案 0 :(得分:0)

要查找包含特定文本的任何元素,您可以将element方法与:text定位器一起使用:

browser.element(:text => 'First Name is required')

但是,默认情况下,Watir将返回匹配的第一个元素。鉴于我们在整个DOM中搜索任何元素类型,这将始终是html元素:

browser.element(:text => 'First Name is required').tag_name
#=> "html"

如果您了解有关所查找元素的更多详细信息,可以将其与:text定位器结合使用并获取该特定元素。例如,如果您知道它将始终是label元素,其中包含类&#34;错误&#34;,您可以这样做:

browser.label(:class => 'error', :text => 'First Name is required').html
#=> <label class="error" for="member_first_name">
#=>   <span class="label-norm">
#=>     First Name
#=>   </span>
#=>   <span id="member_first_name-error" class="label-error">
#=>     is required
#=>   </span>
#=> </label>

如果您无法创建更具体的定位器,则可以使用elements方法(请注意复数化)来查找包含特定文本的所有元素。集合中的最后一个元素将是包含文本的最近可能元素:

browser.elements(:text => 'First Name is required').last.html
#=> <label class="error" for="member_first_name">
#=>   <span class="label-norm">
#=>     First Name
#=>   </span>
#=>   <span id="member_first_name-error" class="label-error">
#=>     is required
#=>   </span>
#=> </label>