如何 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 未知对象异常 错误
@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?
对于上述所有选项,它们 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 或用户可见文本。
我正在尝试 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 未知对象异常 错误
@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?
对于上述所有选项,它们 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 或用户可见文本。