【问题标题】:Selenium: clicking - div within a divSelenium:单击 - div 中的 div
【发布时间】:2013-03-19 15:34:37
【问题描述】:

我有这个:

<div class="dhx_toolbar_btn def" title="">
<div>Interface</div>
</div>

我想知道如何让 Selenium 点击它,因为我尝试了这个:

//div[@class='dhx_toolbar_btn def' and contains(., 'Interface')]

还有这个:

css=.dhx_toolbar_btn def:contains('Interface')

但似乎两者都不起作用,但它似乎与其他像这样的 div 一起使用:

<td class="td_btn_txt">
<div class="btn_sel_text">Billing Interface</div>
</td>

感谢任何帮助。 谢谢

**编辑**
我也试过这些,但都不起作用,也没有返回任何错误:

//div[5]/div/div[5]/div[9]
//*[text()='Interface']
//*[normalize-space(text())='Interface']
//*[contains(text(), 'Interface')]

**编辑**
我也刚刚注意到,当我尝试最后 4 个但使用 mouseDown 而不是单击时,它完全符合预期,(让它看起来像鼠标在项目上,但不点击它),所以我想知道为什么它会用mouseDown做它应该做的事情,但点击它什么都不做,甚至不返回错误。

【问题讨论】:

    标签: html selenium automated-tests selenium-ide


    【解决方案1】:

    尝试使用 Element Locator 的 CSS 选择器选项

    像这样的

    css = "div.dhx_toolbar_btn div"
    

    当然,这取决于您的完整 DOM 的外观。

    【讨论】:

    • 我可以使用 DOM idd 来点击它吗?
    • 如果你要设置一个元素的Id,你可以使用它。查看 Element Locator 文档,有很多选项(包括 XPath)。但是明智地选择,DOM 解析很昂贵,并且会减慢您的测试速度。
    • 我查看了文档。以为我可以将它与类一起使用:xpath=//a[contains(@href,'#id1')],但看不到我将如何指定 'Interface' 而不是任何其他具有相同类名的 div。
    • 请避免查找 innerText,您的测试会变得不稳定。屏幕上显示的文本可能会发生变化,而您的逻辑不会改变。例如,想象一下您的网站有多种语言。相反,我的建议是让你的 DOM 健壮且可测试。在这种情况下,添加 ID 或类以使您的 DOM 可测试。
    • 很遗憾,我不是制作网站的人,也没有权限更改它。我只是想使用 Selenium 来为每个发布的新浏览器更轻松、更快地测试网站。由于这个 Interface 没有 Class 或 ID,并且只是写为 &lt;div&gt;Interface&lt;/div&gt;,我将如何使用 Selenium 中的 CSS 来点击它?
    【解决方案2】:

    试试 xpath:

    //div[@class=\"dhx_toolbar_btn def\"]/div
    

    那个 xpath 将为您提供带有文本“接口”的 div。如果 div 中有多个具有“dhx_toolbar_btn”类的 div,则执行

    //div[@class=\"dhx_toolbar_btn def\"]/div[text()="Interface"]
    

    如果您有多个包含“接口”的 div,我将以编程方式构建 Xpath 并传入您正在寻找的确切文本,假设文本是静态的。

    【讨论】:

    • 我尝试了你上面提到的两种方法,我得到了错误 Invalid xpath。澄清一下,我有多个具有“_dhx_toolbar_btn def”类的 div,其中包含没有上述类的 div:&lt;div class="dhx_toolbar_btn def" title=""&gt; &lt;div&gt;Masterfile&lt;/div&gt; &lt;/div&gt; &lt;div class="dhx_toolbar_btn def" title=""&gt; &lt;div&gt;Interface&lt;/div&gt; &lt;/div&gt;
    【解决方案3】:

    好的,所以不完全是我想要的方式,或者让它工作,但它有点:

    <tr>
    <td>waitForElementPresent</td>
    <td>//div[@class='dhx_toolbar_btn def' and contains(., 'Interface')]</td>
    <td></td>
    </tr>
    <tr>
    <td>mouseDown</td>
    <td>//*[text()='Interface']</td>
    <td></td>
    </tr>
    <tr>
    <td>mouseOver</td>
    <td>//*[normalize-space(text())='Interface']</td>
    <td></td>
    </tr>
    <tr>
    <td>mouseDown</td>
    <td>//*[text()='Interface']</td>
    <td></td>
    </tr>
    <tr>
    <td>click</td>
    <td>//div[5]/div/div[5]/div[9]</td>
    <td></td>
    </tr>
    <tr>
    <td>mouseOut</td>
    <td>//div[5]/div/div[5]/div[9]</td>
    <td></td>
    </tr>
    

    虽然我更喜欢更简单的方法。

    【讨论】:

      猜你喜欢
      • 2017-01-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-03-02
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多