Java 如何使用SeleniumWebDriver在每次页面加载时查找动态ID/名称发生变化的元素

Java 如何使用SeleniumWebDriver在每次页面加载时查找动态ID/名称发生变化的元素,java,selenium,selenium-webdriver,webdriver,Java,Selenium,Selenium Webdriver,Webdriver,我找到了一些答案,但他们没有回答我的问题,所以我写了一个新问题 我的HTML代码包含以下类型的复选框元素(在浏览器的inspect元素中) 提前谢谢你的帮助 您可以使用cssSelector或xpath webDriver.findElement(By.cssSelector("[id*='TransactionFormModel']")); webDriver.findElement(By.xpath("//input[contains(@id, 'TransactionFormModel'

我找到了一些答案,但他们没有回答我的问题,所以我写了一个新问题

我的HTML代码包含以下类型的复选框元素(在浏览器的inspect元素中)


提前谢谢你的帮助

您可以使用
cssSelector
xpath

webDriver.findElement(By.cssSelector("[id*='TransactionFormModel']"));

webDriver.findElement(By.xpath("//input[contains(@id, 'TransactionFormModel')]"));
您可以用ID的任何其他固定部分替换
TransactionFormModel

作为旁注,不需要两次定位元素。你能行

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

您可以这样编写xpath:

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

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

下面是一些XPath示例,您可以使用它们查找复选框

  //input[contains(@id,'jqg_TransactionFormModel')]
或者,如果您想要更多支票,请尝试以下操作

  //*[starts-with(@id,'jqg_TransactionFormModel') and contains(@id,'EditCollection2_')]
此外,您还可以使用匹配项来尝试正则表达式

  //*[matches(@id,'<regex matching your id>')]
/*[匹配(@id',)]

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

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

无论采用哪种格式,只要元素存在于DOM中,就始终可以选中该复选框。如果需要研究其他属性,可以使用选择器执行hasClass()或其他需要的操作


希望有帮助

对这个问题投反对票的人,请帮助我改进这个问题。如果你不想帮忙,请不要投票,让其他人来帮我。如果下面的任何答案对你有帮助,请接受或投票给其他仍然面临问题的人,然后提出你的建议query@TrimantraSoftwareSolution一旦我得到“提出的问题”的答案,我将接受。谢谢你的建议:)谢谢!!我对使用你建议的正则表达式很感兴趣。你能帮我怎么为上面提到的ID做正则表达式吗?我做了一些搜索,找到了这个。。。很遗憾,您不能在Selinium中使用匹配项:
  //*[starts-with(@id,'jqg_TransactionFormModel') and contains(@id,'EditCollection2_')]
  //*[matches(@id,'<regex matching your id>')]