【问题标题】:How to click a checkbox using selenium如何使用硒单击复选框
【发布时间】:2014-05-11 15:50:33
【问题描述】:
<div id="yui_3_16_0_1_1399697074576_1339" class="cbox " role="gridcell">
<input id="yui_3_16_0_1_1399697074576_1338" type="checkbox" tabindex="-1" 89513626107905="" aria-label="Message " title="Select this email">
<span id="yui_3_16_0_1_1399697074576_1340" class="icon"></span>
</div>`

以上 HTML 来自 firebug。

我想点击复选框,上面的 ID 是id="yui_3_16_0_1_1399697074576_1338"。我尝试使用by.idby.path,但是它们都不起作用。 以下是我尝试过的:

By.id("yui_3_16_0_1_1399697074576_1338")
By.xpath("//input[@id='yui_3_16_0_1_1399697074576_1339'

有人可以帮我解决这个问题吗?

【问题讨论】:

  • 如果你试过 By.id | By.xpath 和 findElement 并且它们都不能生成所选的 id。
  • ID好像是动态生成的。
  • 由于 ID 看起来像是动态生成的,因此您需要寻找一些不同的 id、类或元素,以便您可以从中找到带有输入的 div。这可以通过例如位置选择器&lt;some specific selector higher up&gt;/div[1]/input[1]来完成。

标签: java html selenium xpath


【解决方案1】:

从不想要匹配这样的 ID。我推荐的是匹配一些更“独特”的东西。

试试:

By.cssSelector("input[type='checkbox'][title='Select this email']")

上面的这个选择器将完美匹配您的&lt;input/&gt;。而且,它没有与 Yahoo UI 耦合,因此如果您或您的开发人员更改了软件,它会考虑到这一点。

【讨论】:

    【解决方案2】:

    如果 id 是静态的:

     string checkboxXPath = "//input[contains(@id, 'yui_3_16_0_1_1399697074576_1338')]"
    

    对于动态标签值:

               string checkboxXPath = "//input[contains(@type,'checkbox') and                       
              contains(@title,'Select this email')]"
    
    IWebElement elementToClick = driver.FindElement(By.XPath(checkboxXPath));
    elementToClick.Click();
    

    【讨论】:

    • ID 值每次都在变化,所以我不能使用 find ID。我需要另一种方法来做到这一点
    • 谢谢 loknath,我也是这样做的,使用 'contains(@title, 'Select this email');我不能投票,因为我是新来的
    【解决方案3】:

    您必须使用 id 获取元素并单击。类似于按钮点击

    driver.findElement(By.id("yui_3_16_0_1_1399697074576_1338")).click();
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-05-11
      • 1970-01-01
      • 2022-01-17
      • 1970-01-01
      • 2021-08-12
      • 2019-10-13
      • 2015-08-02
      • 2017-04-30
      相关资源
      最近更新 更多