XPath:转换为小写并同时转换为Normalize-space

时间:2017-09-24 15:33:50

标签: python selenium xpath

我使用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"匹配。

2 个答案:

答案 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()”