如何使用Selenium WebDriver

时间:2017-05-23 09:36:34

标签: java selenium selenium-webdriver webdriver

我找到了一些关于此的答案,但他们没有回答我的问题,所以我正在写一个新问题。

我的HTML代码具有以下类型的复选框元素(在浏览器的检查元素中)

<input role="checkbox" type="checkbox" id="jqg_TransactionFormModel501EditCollection2_147354_grid_-1274" class="cbox" name="jqg_TransactionFormModel501EditCollection2_147354_grid_-1274" value="true">

在我的测试用例中,我想使用Selenium Webdriver点击复选框,使用其ID。

此处Id =&#34; jqg_TransactionFormModel 501 EditCollection2_ 147354 网格 - 1274 &#34;是动态的。

以上ID, Bold&amp;斜体 标记的字母(动态)将随同一页面中的不同复选框以及页面刷新而变化。

粗体标记的字母(动态)仅在页面刷新时更改(在同一页面的所有复选框中保持相同。)

我如何格式化/编写XPATH,以便我可以使用下面的语句点击所需的复选框。

WebElement checkbox = webDriver.findElement(By.id("idOfTheElement"));
if (!checkbox.isSelected()) {
    checkbox.click();
}

感谢您提前帮助..!

4 个答案:

答案 0 :(得分:1)

以下是一些可用于查找复选框的xpath示例

  //input[contains(@id,'jqg_TransactionFormModel')]

或者,如果您想要更多检查,请尝试类似

的内容
  //*[starts-with(@id,'jqg_TransactionFormModel') and contains(@id,'EditCollection2_')]

此外,您还可以使用匹配

来尝试正则表达式
  //*[matches(@id,'<regex matching your id>')]

答案 1 :(得分:0)

您可以使用cssSelectorxpath

来使用部分ID
webDriver.findElement(By.cssSelector("[id*='TransactionFormModel']"));

webDriver.findElement(By.xpath("//input[contains(@id, 'TransactionFormModel')]"));

您可以将TransactionFormModel替换为ID的任何其他固定部分。

作为旁注,不需要两次定位元素。你可以做到

WebElement checkbox = webDriver.findElement(By.id("idOfTheElement"));
if (!checkbox.isSelected()) {
    checkbox.click();
}

答案 2 :(得分:0)

您可以像这样编写xpath:

//input[starts-with(@id,'jqg_TransactionFormModel')]

//input[contains(@id,'jqg_TransactionFormModel')]

答案 3 :(得分:0)

我建议不要使用ID或xpath并为元素添加数据属性。通过这种方式,您可以避免xpath的烦恼,并拥有一个强大的选择器,您可以自信地总是可以选择。

例如,您可以调用属性:data-selector。您可以指定值“transactionFormModelCheckbox”。然后,在创建新元素时,您可以使用上面引用的值通过css选择器创建。

无论何种类型的格式化,您始终都可以选择该复选框 - 只要元素存在于DOM中即可。如果需要调查其他属性,可以使用选择器执行hasClass()或其他任何需要的操作。

希望有所帮助!