问题描述
我需要查找以下 HTML 元素。现在,这个“id”名称是动态的,因为最后的 int“0” 会改变,但我知道它会是什么。 “0-0”中的第一个 int 也会改变,但它是什么并不重要。
<div id="ui-select-choices-row-0-0">
我尝试了以下代码,该代码查找以“#ui-select-choices-row-”开头并以所需输入“int”结尾的元素,但未按预期找到它。关于我在这里做错的任何建议?
尝试 1:
driver.findElement(By.cssSelector("div[id^='#ui-select-choices-row-'] and div[id$='"+int+" div']"));
尝试 2:
driver.findElement(By.cssSelector("div[id^='ui-select-choices-row-'] and div[id$='"+int+"']"));
解决方法
你已经足够接近了。您需要删除 #
开头的 id
,因为 #
本身表示 id
属性。
动态 CSS_SELECTOR 的说明
要仅考虑 href
和 data-drupal-link-system-path
属性的静态部分,您可以在 css-selectors 中使用以下通配符:
-
$ :表示一个属性值以
结尾 -
^ :表示一个属性值以
开头
所以最细粒度的 css_selector 是:
div[id^='ui-select-choices-row-'][id$='" +count+ "']
解决方案
您的有效代码行将是:
driver.findElement(By.cssSelector("div[id^='ui-select-choices-row-'][id$='" +count+ "']"));
注意:int
为关键字,变量名使用其他名称。
参考文献
您可以在以下位置找到一些相关的详细讨论: