无法点击下拉菜单项

时间:2015-08-07 14:35:50

标签: ruby selenium cucumber bdd watir-webdriver

我想执行以下步骤:

  1. 在输入区域输入一些元素(变量名称 - '用户名')
  2. 打开下拉建议。 [声明:username =“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>
    
  4. 我试过以下:

    • @ browser.div(:类, “建议”)。P(:文本,用户名).wait_while_present @ browser.div(:类, “建议”)。P(:文本,用户名)。单击
    • @ browser.span(:类, “全建议”)DIV。(:类, “建议”)。P(:文本,用户名).wait_while_present @ browser.span(:类, “全建议”)DIV。(:类, “建议”)第(:文本,用户名)。单击
    • @ browser.span(:类, “主下拉”)。DIV(:类, “建议”)第(:文本,用户名).wait_while_present @ browser.span(:类, “主下拉”)。DIV(:类, “建议”)第(:文本,用户名)。单击

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

    任何帮助都将不胜感激。

1 个答案:

答案 0 :(得分:4)

问题是元素的路径是过度指定的。 Watir单独处理每个元素方法,返回每个调用的第一个匹配。它没有考虑链式方法。

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

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

实际上说:

  1. 在课程页面上找到第一个div&#34;建议&#34;。
  2. 在该div中,找到带有文字username的第一个p。
  3. 这意味着Watir只会找到&#34; user1&#34;段落。

    嵌套元素调用时,您只想包含与所有元素相同的祖先元素。例如,以下任何一个都可以工作:

    # 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