我正在尝试使用文本“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未知对象异常错误
@browser.div(:class => "x-combo-list-inner", :text => "1 :272988").click
@browser.div(:class => "x-combo-list-inner").div(:class => "x-combo-list-item", :text => "1 : 272988").click
@browser.div(:class => "x-combo-list-inner").div(:class => "x-combo-list-item", :index => 8)
@browser.div(:class => "x-combo-list-inner").div(:text => "1 : 272988").click
对于以上所有,我也尝试过替换
.click
与
.wait_until_present
并获取 watir超时异常错误。我也试过表演
.exists?
对于上述所有选项,他们返回 false 。
结果会显示组合列表项实际上并不存在,但是当我检查包含组合列表项的包含div元素时,如下所示
puts @browser.div(:class => "x-combo-list-inner").div(:class => "x-combo-list-item").exists?
返回 true 值。
非常感谢任何其他想法,因为我已经用完了。
答案 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或用户可见文本。