我正在使用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>
答案 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>