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

时间:2015-02-28 07:29:11

标签: watir-webdriver

我正在尝试使用文本“1:272988”选择组合列表中的项目,其中组合列表被定义为 div 标记的列表,所有标记都具有与以下相同的类名:

<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
  5. 对于以上所有,我也尝试过替换

    .click
    

    .wait_until_present
    

    并获取 watir超时异常错误。我也试过表演

    .exists? 
    

    对于上述所有选项,他们返回 false

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

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

    返回 true 值。

    非常感谢任何其他想法,因为我已经用完了。

1 个答案:

答案 0 :(得分:0)

嵌套元素定位器的问题,即@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或用户可见文本。