11.1 通过元素可见文本定位
在Selenium中,通过元素的可见文本进行定位可以通过XPath和CSS选择器实现。以下是模糊定位和精确定位两种情况的示例:
11.1.1 模糊定位(部分匹配)
11.1.1.1 使用XPath:
- 包含文本:
使用contains()函数来查找包含指定文本的元素。
elements = driver.find_elements_by_xpath("//*[contains(text(), 'some text')]")
- 开始匹配:
使用starts-with()函数来查找文本以指定字符串开始的元素。
elements = driver.find_elements_by_xpath("//*[starts-with(text(), 'some text')]")
- 结束匹配:
使用substring()函数和string-length()来查找文本以指定字符串结束的元素。
elements = driver.find_elements_by_xpath("//*[contains(substring(text(), string-length(text()) - string-length('some text') + 1), 'some text')]")
11.1.1.2 使用CSS选择器:
CSS选择器本身不直接支持文本匹配,但可以结合其他属性或类名进行模糊定位。
11.1.2 精确定位(完全匹配)
11.1.2.1 使用XPath:
- 完全匹配文本:
使用=运算符和text()函数来查找文本完全匹配的元素。
element = driver.find_elements_by_xpath("//*[text() = 'exact text']")
- 使用
normalize-space():
当需要忽略元素文本首尾的空白字符时,可以使用normalize-space()函数。
element = driver.find_elements_by_xpath("//*[normalize-space(text()) = 'exact text']")
11.1.2.2 使用JavaScript:
如果XPath和CSS选择器不能满足需求,可以使用 execute_script() 执行JavaScript来定位元素。
script = """
var textToFind = 'exact text';
var elements = document.querySelectorAll('*');
return Array.from(elements).filter(function(el) {
return el.textContent === textToFind;
});
"""
elements = driver.execute_script(script)
11.1.3 注意事项:
- 模糊定位时,
contains()函数不会考虑文本的前后空格,如果需要考虑空格,可以使用normalize-space()。 - 精确定位时,确保比较的文本完全相同,包括空格和大小写。
- 使用JavaScript进行文本匹配时,可以在Selenium的
execute_script()中使用document.querySelectorAll()和Array.from()结合filter()来实现。
在实际使用中,选择哪种方法取决于具体需求和个人偏好。XPath提供了丰富的文本匹配功能,而CSS选择器和JavaScript提供了其他定位手段。


被折叠的 条评论
为什么被折叠?



