如何根据相邻文本访问div元素文本

时间:2014-12-11 09:03:04

标签: html watir

我有以下HTML代码,并尝试访问" QA1234",这是序列号的值。你能让我知道如何访问这个文本吗?

<div class="dataField">
  <div class="dataName">
    <span id="langSerialNumber">Serial Number</span>
  </div>
  <div class="dataValue">QA1234</div>
</div>

<div class="dataField">
  <div class="dataName">
    <span id="langHardwareRevision">Hardware Revision</span>
  </div>
  <div class="dataValue">05</div>
</div>

<div class="dataField">
  <div class="dataName">
    <span id="langManufactureDate">Manufacture Date</span>
  </div>
  <div class="dataValue">03/03/2011</div>
</div>

1 个答案:

答案 0 :(得分:0)

我假设你试图以“序列号”的形式获得“QA1234”文本。如果这是正确的,你基本上需要:

  1. 找到包含序列号范围的“dataField”div。
  2. 在该div中获取“dataValue”。
  3. 一种方法是获取所有“dataField”div并找到包含span的那个:

    parent = browser.divs(class: 'dataField').find { |div| div.span(id: 'langSerialNumber').exists? }
    p parent.div(class: 'dataValue').text
    #=> "QA1234"
    
    parent = browser.divs(class: 'dataField').find { |div| div.span(id: 'langManufactureDate').exists? }
    p parent.div(class: 'dataValue').text
    #=> "03/03/2011"
    

    另一种选择是查找序列号范围,然后遍历到父“dataField”div:

    parent = browser.span(id: 'langSerialNumber').parent.parent
    p parent.div(class: 'dataValue').text
    #=> "QA1234"
    
    parent = browser.span(id: 'langManufactureDate').parent.parent
    p parent.div(class: 'dataValue').text
    #=> "03/03/2011"
    

    我发现第一种方法对更改更加健壮,因为它更灵活地将序列号嵌套在“dataField”div中。但是,对于包含大量字段的页面,可能性能较差。