无法单击下拉菜单项中的元素

Unable to click on element from dropdown menu item

我想执行以下步骤:

  1. 在输入区输入一些元素(变量名 - 'username')
  2. 打开下拉建议。 [声明:用户名="user2"]
  3. 检查下拉列表中是否存在元素 '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>
    

我试过以下方法:

问题: 'user2' 显示在下拉列表中,但无法从下拉列表中单击该元素。

如有任何帮助,我们将不胜感激。

问题是元素的路径指定过多。 Watir 以相同的方式处理 div 中的每个元素方法,返回每个调用的第一个匹配项。它不考虑链式方法。

例如,考虑第一个不起作用的代码:

@browser.div(:class,"suggestion").p(:text,username).click

实际说:

  1. 在 class "suggestion" 的页面上找到第一个 div。
  2. 在 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