簡介:寫自動化用例時經常會用到xpath來定位元素,這裏總結一下xpath語法中不等於、不包含的寫法
問題
如下圖:該頁面有兩個頁籤,我們需要在第二個頁籤進行操作:在輸入框輸入後點擊確定按鈕。
第一次寫的xpath是這樣的
//button[./span[text()='確定']]
運行時報錯 element not interactable,出現這種錯誤通常因爲是這個xpath定位到的元素不在當前頁面,所以報不可點擊錯誤。報錯信息如下:
org.openqa.selenium.ElementNotVisibleException: element not interactable
分析
用XpathHelper在頁面測試了一下,發現該xpath定位到了兩個確定按鈕,如下圖:
通過F12查看對應元素的dom樹,如下圖
可以看到該目標元素上層有兩個class='el-tab-pane’的div,點開第一個class='el-tab-pane’的div,如下圖:
可以看到,第一個class='el-tab-pane’的div下面也有一個“確定”按鈕,說明我前面寫的xpath定位到了第一個“確定”按鈕。
繼續觀察,第一個class='el-tab-pane’的div裏面還多了一個 style=“display: none;” 屬性,那我們要定位第二個div時就可以排除這個屬性。
解決
這裏嘗試了三種寫法都可以定位到第二個“確定”按鈕,分別如下:
- 使用不等於符號:!=
//div[@class='el-tab-pane' and @style!='display: none;']//button[./span[text()='確定']]
- 使用 not()
//div[@class='el-tab-pane' and not(@style='display: none;')]//button[./span[text()='確定']]
- 使用 not(contains())
//div[@class='el-tab-pane' and not(contains(@style,'none'))]//button[./span[text()='確定']]
最後都能成功定位到第二個“確定”按鈕,如下圖: