我找到了一些关于此的答案,但他们没有回答我的问题,所以我正在写一个新问题。
我的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();
}
感谢您提前帮助..!
答案 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)
您可以使用cssSelector
或xpath
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()或其他任何需要的操作。
希望有所帮助!