我使用Selenium和Firefox for Selenium。我想匹配包含某个文本的页面上的元素;所以我需要驱动程序以小写字符识别页面上的文本,因此它与我的字符串关键字searchkey.lower()
匹配。
我试图在XPath中使用translate()
函数,但我同时希望normalize-space()
摆脱任何空白问题。
这两个函数可以组合成一个XPath字符串吗?
我尝试了下面的XPath以及其他一些变体,但无法与Selenium driver.find_element_by_xpath(my_xpath)
进行匹配:
my_xpath = "//a[contains(translate(normalize-space(.), '%s', 'ABCDEFGHIJKLMNOPQRSTUVWXYZ', 'abcdefghijklmnopqrstuvwxyz'))]" % searchkey.lower()"
或作为单行代码块:
my_xpath = "//a[contains(translate(normalize-space(.), '%s', 'ABCDEFGHIJKLMNOPQRSTUVWXYZ', 'abcdefghijklmnopqrstuvwxyz'))]" % searchkey.lower()"
出于测试目的,我们可以假装searchkey = "MY STRING"
,searchkey.lower()
将返回"my string"
。
我要匹配的页面上的元素可能包含文本" mY sTrinG "
。所以我希望XPath将字符转换为小写和删除任何类型的多余空格,因此与上面的"my string"
匹配。
答案 0 :(得分:2)
你的过程是正确的,但xpath有一个小问题。你不会将预期的文本传递给translate函数,你会将它传递给contains函数,所以它可以测试它是否存在
my_xpath = "//a[contains(translate(normalize-space(.), 'ABCDEFGHIJKLMNOPQRSTUVWXYZ', 'abcdefghijklmnopqrstuvwxyz'), '%s')]" % searchkey.lower()"
答案 1 :(得分:1)
您可以在'ABCDEFGHIJKLMNOPQRSTUVWXYZ <“ space”>'中的Z后面的多余的空格。
complete xpath =“ // span [translate(text(),'ABCDEFGHIJKLMNOPQRSTUVWXYZ << strong>” space“ >','abcdefghijklmnopqrstuvwxyz')='look']”
xpath使用contains =“ // span [contains(translate(text(),'ABCDEFGHIJKLMNOPQRSTUVWXYZ << strong>” space“ >','abcdefghijklmnopqrstuvwxyz'),'look')]”
您的xpath =“ // a [包含(translate(text(),'ABCDEFGHIJKLMNOPQRSTUVWXYZ << strong>”空格“ >','abcdefghijklmnopqrstuvwxyz'),'%s')]”%搜索关键字。 lower()”