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

How to extract the element(s) that contains some known text

我正在使用 Watir-Webdriver。

我知道页面上有特定的文字,即:"First Name is required"

browser.text.include("First Name is required") returns true哪个好

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

此文本字段上的检查元素 returns:

<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>

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

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

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

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

如果您知道有关要查找的元素的更多详细信息,则可以将其与 :text 定位器结合使用并获取该特定元素。例如,如果您知道它将始终是一个带有 class "error" 的 label 元素,您可以这样做:

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 方法(注意复数形式)来查找包含特定文本的 all 元素。集合中的最后一个元素将是包含文本的最接近的可能元素:

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>