是否可以通过Selenium中的部分id匹配来定位元素

时间:2015-07-06 14:42:51

标签: selenium selenium-webdriver

我正在尝试使用生成的ID定位元素,其中ID的某些部分是已知的;例如:

id="page_x002e_x0023_default-create-firstname"

其中最后3个单词(_default-create-firstname)已知但前面的任何内容都可能发生变化。 这可能吗?

6 个答案:

答案 0 :(得分:47)

您可以申请ends-with CSS selector

By.cssSelector("[id$=default-create-firstname]")

<强>更新

自答案发布以来,有一段时间过去了。这里有一些来自链接的mozilla开发者页面和下面评论的更新:

新使用By.css而不是By.cssSelector

By.css("[id$=default-create-firstname]")

另见

的四种可能性
  • 开头
  • 里面的任何地方
  • 无论大写无论何处都在里面
  • 结束
/* Internal links, beginning with "#" */
a[href^="#"] {
  background-color: gold;
}

/* Links with "example" anywhere in the URL */
a[href*="example"] {
  background-color: silver;
}

/* Links with "insensitive" anywhere in the URL,
   regardless of capitalization */
a[href*="insensitive" i] {
  color: cyan;
}

/* Links that end in ".org" */
a[href$=".org"] {
  color: red;
}

答案 1 :(得分:22)

如果您想沿着xpath路线走,那么您可以使用contains(),如下所示:

//*[contains(@id,'_default-create-firstname')]

这将在整个页面中搜索包含文本&#34; _default-create-firstname&#34;的ID。它可以很容易地变得更具体

答案 2 :(得分:17)

您可以在Java-Selenium中试用:您可以使用ends-with()contains()。我认为两者都应该有用。

driver.findElement(By.xpath("//*[ends-with(@id,'_default-create-firstname')]"));
driver.findElement(By.xpath("//*[contains(@id, '_default-create-firstname')]"));

答案 3 :(得分:6)

这适用于selenium v​​ba

 .FindElementsByXPath( "//*[contains(@class, 'unique-string')]" )

答案 4 :(得分:0)

工作一个

driver.find_element_by_xpath("//*[contains(@id, 'jobs-search-box-keyword-id')]")

不工作的人,都遇到相同的错误, TypeError:“ str”对象不可调用

1. driver.find_element(By.XPATH("//*[contains(@id, 'jobs-search-box-keyword-id')]")).text

2. driver.find_element(By.XPATH("//*[contains(@id, 'jobs-search-box-keyword-id')]").text).text

3. driver.find_element(By.XPATH("//*[contains(@id, 'jobs-search-box-keyword-id')]")).get_attribute("innerHTML")

4. driver.find_element(By.XPATH("//*[contains(@id, 'jobs-search-box-keyword-id')]").get_attribute("innerHTML")).get_attribute("innerHTML")

我使用python 3.7.6,硒3.141.0

答案 5 :(得分:-1)

我使用:a[id*='example']

当我的 ID 类似于 example_12