![](/img/trans.png)
[英]Python selenium presence_of_element_located((By.XPATH, ) need case insensitive
[英]Python: Selenium xpath to find element with case insensitive characters?
我能做到
search = "View List"
driver.find_elements_by_xpath("//*/text()[normalize-space(.)='%s']/parent::*" % search)
但我需要它忽略所有元素並將其與文本匹配,例如:“VieW LiSt”或“view LIST”
search = "View List"
driver.find_elements_by_xpath("//*/lower-case(text())[normalize-space(.)='%s']/parent::*" % search.lower())
以上似乎不起作用。 lower-case()
在 XPATH 1.0
只有XPath 2.0支持lower-case()
函數。 對於XPath 1.0,您將不得不使用translate()
。
此stackoverflow答案中給出了示例代碼。
編輯:selenium python綁定站點有一個FAQ - Selenium 2是否支持XPath 2.0? :
參考: http : //seleniumhq.org/docs/03_webdriver.html#how-xpath-works-in-webdriver
Selenium委托XPath查詢瀏覽器自己的XPath引擎,因此Selenium支持XPath支持瀏覽器支持的任何內容。 在沒有本機XPath引擎的瀏覽器中(IE 6,7,8),Selenium僅支持XPath 1.0。
由於lower-case()
僅在 2.0 中受支持,因此我使用translate()
想出了這個解決方案,因此我不需要每次都手動輸入整個 function
translate = "translate({value},'ABCDEFGHIJKLMNOPQRSTUVWXYZ','abcdefghijklmnopqrstuvwxyz')"
driver.find_elements(By.XPATH, f"//*/{translate.format(value='text()')}[normalize-space(.)='{search.lower()}']/parent::*")
哪個計算為:
>>> print(f"//*/{translate.format(value='text()')}[normalize-space(.)='{search.lower()}']/parent::*")
"//*/translate(text(),'ABCDEFGHIJKLMNOPQRSTUVWXYZ','abcdefghijklmnopqrstuvwxyz')[normalize-space(.)='view list']/parent::*"
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.