【发布时间】:2015-07-06 14:42:50
【问题描述】:
我正在尝试使用生成的 ID 来定位元素,其中 ID 的某些部分是已知的;例如:
id="page_x002e_x0023_default-create-firstname"
其中最后 3 个单词 (_default-create-firstname) 是已知的,但前面的任何内容可能会发生变化。 这可能吗?
【问题讨论】:
标签: selenium selenium-webdriver
我正在尝试使用生成的 ID 来定位元素,其中 ID 的某些部分是已知的;例如:
id="page_x002e_x0023_default-create-firstname"
其中最后 3 个单词 (_default-create-firstname) 是已知的,但前面的任何内容可能会发生变化。 这可能吗?
【问题讨论】:
标签: selenium selenium-webdriver
您可以申请ends-with CSS selector:
By.cssSelector("[id$=default-create-firstname]")
更新
自发布答案以来已经过去了一段时间。以下是来自链接的 Mozilla 开发者页面和 cmets 的一些更新:
新使用 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;
}
【讨论】:
如果你想走 xpath 路线,那么你可以使用contains(),像这样:
//*[contains(@id,'_default-create-firstname')]
这将在整个页面中搜索包含文本“_default-create-firstname”的 id。它可以很容易地变得更具体
【讨论】:
您可以在 Java-Selenium 中进行尝试:您可以使用 ends-with() 或 contains()。我认为两者都应该工作。
driver.findElement(By.xpath("//*[ends-with(@id,'_default-create-firstname')]"));
driver.findElement(By.xpath("//*[contains(@id, '_default-create-firstname')]"));
【讨论】:
ID=Mscrm.BasicHomeTab.New.NewRecord 的元素 - 我成功获取了元素 FindElement(By.XPath("//*[@id='Mscrm.BasicHomeTab.New.NewRecord']")) 但如果我尝试通过部分 ID 获取元素它会失败 FindElement(By.XPath("//*[ends-with(@id,'NewRecord')]")) 第二个查询有什么问题?
这适用于 selenium vba
.FindElementsByXPath( "//*[contains(@class, 'unique-string')]" )
【讨论】:
工作一个
driver.find_element_by_xpath("//*[contains(@id, 'jobs-search-box-keyword-id')]")
不工作的,都得到同样的错误,TypeError: 'str' object is not callable
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
【讨论】:
我使用:a[id*='example']
当我的 ID 类似于 example_12
【讨论】: