【问题标题】:How to extract the element(s) that contains some known text如何提取包含某些已知文本的元素
【发布时间】:2015-01-22 09:20:41
【问题描述】:

我正在使用 Watir-Webdriver。

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

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

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

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

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

【问题讨论】:

  • 可以考虑xpath吗?
  • “css/html”是什么意思?您想要的文本被分成两个独立的 span 元素。你想为其中一个获得一个 Watir::Element 对象,还是你的意思是别的?
  • 您想取回哪个元素?例如,文本包含在&lt;div class="input-group"&gt;&lt;div class="input-container input-left-half round"&gt;&lt;label class="error" for="member_first_name"&gt; 和任何祖先元素(如&lt;body&gt;)中。最祖先元素很容易做到,但我猜你想要最接近的祖先 - label?
  • 我想我想要包含该文本的最接近的元素

标签: ruby selenium-webdriver watir watir-webdriver


【解决方案1】:

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

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

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

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

如果您知道有关您正在寻找的元素的更多详细信息,您可以将其与:text 定位器结合起来并获取该特定元素。例如,如果您知道它始终是带有“错误”类的 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 方法(注意复数形式)来查找包含特定文本的所有 元素。集合中的最后一个元素将是包含文本的最接近的元素:

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>

【讨论】:

  • 虽然,我没有完成我想做的事情,但您的回答为我提供了一些有用的提示,谢谢!
猜你喜欢
  • 2018-02-27
  • 1970-01-01
  • 2020-09-27
  • 2023-03-16
  • 2021-08-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-03-27
相关资源
最近更新 更多