无法单击下拉菜单项中的元素
Unable to click on element from dropdown menu item
我想执行以下步骤:
- 在输入区输入一些元素(变量名 - 'username')
- 打开下拉建议。 [声明:用户名="user2"]
检查下拉列表中是否存在元素 'username';如果是,则要单击该元素并完成。
<span class="main-dropdown">
<div class="tt">
<span class="all-suggestions">
<div class="suggestion">
<p>user1</p>
</div>
<div class="suggestion">
<p>user2</p>
</div>
<div class="suggestion">
<p>user3</p>
</div>
</span>
</div>
</span>
我试过以下方法:
- @browser.div(:class,"suggestion").p(:文本,用户名).wait_while_present
@browser.div(:class,"suggestion").p(:文本,用户名).click
- @browser.span(:class,"all-suggestions").div(:class,"suggestion").p(:text ,用户名).wait_while_present
@browser.span(:class,"all-suggestions").div(:class,"suggestion").p(:文本,用户名).click
- @browser.span(:class,"main-dropdown").div(:class,"suggestion").p(:text ,用户名).wait_while_present
@browser.span(:class,"main-dropdown").div(:class,"suggestion").p(:文本,用户名).click
问题: 'user2' 显示在下拉列表中,但无法从下拉列表中单击该元素。
如有任何帮助,我们将不胜感激。
问题是元素的路径指定过多。 Watir 以相同的方式处理 div 中的每个元素方法,返回每个调用的第一个匹配项。它不考虑链式方法。
例如,考虑第一个不起作用的代码:
@browser.div(:class,"suggestion").p(:text,username).click
实际说:
- 在 class "suggestion" 的页面上找到第一个 div。
- 在 div 中找到第一个带有文本
username
的 p。
这意味着 Watir 只会找到 "user1" 段落。
嵌套元素调用时,您只想包含所有元素的同一祖先元素。例如,以下任何一项都有效:
# Using the only matching div.suggestion
@browser.div(:class => 'suggestion', :text => username).p.click
# Only using the common ancestor span.all-suggestions
@browser.span(:class,"all-suggestions").p(:text,username).click
如果你真的想保留所有的嵌套,你将需要使用 XPath:
@browser.p(:xpath => "//div[@class='suggestion']/p[text()='#{username}']").click
我想执行以下步骤:
- 在输入区输入一些元素(变量名 - 'username')
- 打开下拉建议。 [声明:用户名="user2"]
检查下拉列表中是否存在元素 'username';如果是,则要单击该元素并完成。
<span class="main-dropdown"> <div class="tt"> <span class="all-suggestions"> <div class="suggestion"> <p>user1</p> </div> <div class="suggestion"> <p>user2</p> </div> <div class="suggestion"> <p>user3</p> </div> </span> </div> </span>
我试过以下方法:
- @browser.div(:class,"suggestion").p(:文本,用户名).wait_while_present @browser.div(:class,"suggestion").p(:文本,用户名).click
- @browser.span(:class,"all-suggestions").div(:class,"suggestion").p(:text ,用户名).wait_while_present @browser.span(:class,"all-suggestions").div(:class,"suggestion").p(:文本,用户名).click
- @browser.span(:class,"main-dropdown").div(:class,"suggestion").p(:text ,用户名).wait_while_present @browser.span(:class,"main-dropdown").div(:class,"suggestion").p(:文本,用户名).click
问题: 'user2' 显示在下拉列表中,但无法从下拉列表中单击该元素。
如有任何帮助,我们将不胜感激。
问题是元素的路径指定过多。 Watir 以相同的方式处理 div 中的每个元素方法,返回每个调用的第一个匹配项。它不考虑链式方法。
例如,考虑第一个不起作用的代码:
@browser.div(:class,"suggestion").p(:text,username).click
实际说:
- 在 class "suggestion" 的页面上找到第一个 div。
- 在 div 中找到第一个带有文本
username
的 p。
这意味着 Watir 只会找到 "user1" 段落。
嵌套元素调用时,您只想包含所有元素的同一祖先元素。例如,以下任何一项都有效:
# Using the only matching div.suggestion
@browser.div(:class => 'suggestion', :text => username).p.click
# Only using the common ancestor span.all-suggestions
@browser.span(:class,"all-suggestions").p(:text,username).click
如果你真的想保留所有的嵌套,你将需要使用 XPath:
@browser.p(:xpath => "//div[@class='suggestion']/p[text()='#{username}']").click