如何 select 在 div 标签中定义的组合列表文本项,其中所有 div 标签使用 watir webdriver 具有相同的 class 名称

How to select a combo list text item defined within in a div tag where all div tags have the same class name using watir webdriver

我正在尝试 select 组合列表中带有文本“1 : 272988”的项目,其中组合列表定义为 div[= 的列表51=] 标签都具有相同的 class 名称,如下所示:

<div style="width: 108px; height: 300px;" id="ext-gen334" class="x-   combo-list-inner">
  <div class="x-combo-list-item">1 : 1066</div>
  <div class="x-combo-list-item">1 : 2132</div>
  <div class="x-combo-list-item">1 : 4265</div>
  <div class="x-combo-list-item x-combo-selected">1 : 8530</div>
  <div class="x-combo-list-item">1 : 17061</div>
  <div class="x-combo-list-item">1 : 34123</div>
  <div class="x-combo-list-item">1 : 68247</div>
  <div class="x-combo-list-item">1 : 136494</div>
  <div class="x-combo-list-item">1 : 272988</div>
  <div class="x-combo-list-item">1 : 545977</div>

我尝试了下面的选项,但都导致 watir 未知对象异常 错误

  1. @browser.div(:class => "x-combo-list-inner", :text => "1 :272988").click
  2. @browser.div(:class => "x-combo-list-inner").div(:class => "x-combo-list-item", :text => "1 : 272988").click
  3. @browser.div(:class => "x-combo-list-inner").div(:class => "x-combo-list-item", :index => 8)
  4. @browser.div(:class => "x-combo-list-inner").div(:text => "1 : 272988").click

对于以上所有我也尝试过替换

.click

.wait_until_present

并得到 watir 超时异常错误。我也试过表演

.exists? 

对于上述所有选项,它们 return false.

结果表明组合列表项实际上并不存在,但是当我检查包含 div 包含组合列表项的元素时,如下所示

puts @browser.div(:class => "x-combo-list-inner").div(:class => "x-combo-list-item").exists?

a true 值 returned.

如有任何其他想法,我将不胜感激 运行。

嵌套元素定位器的问题,即 @browser.div(:class => "x-combo-list-inner").div(:class => "x-combo-list-item", :text => "1 : 272988") 是 Watir 只查找第一个匹配的父元素。

这意味着在 HTML 中:

<body>
  <div class="x-combo-list-inner">
    <div class="x-combo-list-item">Wrong Text</div>
  </div>
  <div class="x-combo-list-inner">
    <div class="x-combo-list-item">1 : 272988</div>
  </div>
</body>

Watir 将查找第一个 div 元素,该元素只有列表项 "Wrong Text"。你有几个选择。

如果列表项在页面上是唯一的,最简单的解决方法是移除父元素定位器:

@browser.div(:class => "x-combo-list-item", :text => "1 : 272988")

如果不是唯一的,你必须告诉 Watir 使用哪个组合列表。如评论中所述,您可以告诉 Watir 使用特定索引:

@browser.div(:class => "x-combo-list-inner", :index => 1).div(:class => "x-combo-list-item", :text => "1 : 272988")

@browser.divs(:class => "x-combo-list-inner")[1].div(:class => "x-combo-list-item", :text => "1 : 272988")

但是,在使用索引时要小心,因为添加另一个组合列表可能会意外地破坏测试。如果可能,您应该查看组合列表中是否有可用于区分它们的内容。例如,id 或用户可见文本。