Java Selenium webdriver表达式通过以开头和结尾的ccs查找动态元素

问题描述

我需要查找以下 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 的说明

要仅考虑 hrefdata-drupal-link-system-path 属性的静态部分,您可以在 中使用以下通配符:

  • $ :表示一个属性值

    结尾
  • ^ :表示一个属性值

    开头

所以最细粒度的 css_selector 是:

div[id^='ui-select-choices-row-'][id$='" +count+ "']

解决方案

您的有效代码行将是:

driver.findElement(By.cssSelector("div[id^='ui-select-choices-row-'][id$='" +count+ "']"));

注意int为关键字,变量名使用其他名称。


参考文献

您可以在以下位置找到一些相关的详细讨论:

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...