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

Java Selenium webdriver expression finding dynamic element by ccs that starts with and ends with

我需要找到以下 HTML 元素。现在,这个“id”名称是动态的,末尾的 int“0”会发生变化,但我知道它会是什么。 "0-0" 中的第一个整数也会改变,但改变什么并不重要。

<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为关键字,使用其他名称作为变量名。


参考资料

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

  • Finding elements by CSS selector with ChromeDriver (Selenium) in Python