最近在嘗試給自己負責的模塊寫UI自動化的Demo
登錄及切換頁面比較順利
但是遇到下拉框的選擇時,遇到了一點困難
我負責的模塊頁面的下拉框並非Select類型,無法使用select_by_index or select_by_value等方法
其下拉框的html長這樣:
是ul下包裹100+li的形式
先說一下錯誤路徑:
(1)先定位到產品名稱字段,然后通過send_key()把想要錄入的值輸入
結果:前端設定錄入后必須點擊才能選上,導致最后提交時,報該字段為空
(2)嘗試兩次點擊
先定位到產品名稱字段
然后定位下拉選項
兩次定位均使用XPath方式,且使用的是Chrome插件 ChroPath
結果:程序報錯,報element can not interable 或者 Unable to locate element等錯誤
嘗試加入睡眠時間,未果
(3)兩次查找,一次點擊
代碼如下:
Product_list = browser.find_element_by_xpath("//div[@class='el-input el-input--suffix']//input[@placeholder='請選擇產品名稱']") Product_list.find_element_by_xpath('//span[text()="040004 興業銀行2013專戶4號"]').click()
結果:仍然報錯
(4)嘗試自己寫Xpath
搜了無數的文章,自己嘗試寫了無數次
終於解決了,也算是對我即將崩潰的心靈的一次慰藉
說一下成功的這一次的Xpath的編寫路徑:
打開Xpath Helper,按住Shift,查看我要選擇的下拉框所在的塊
找到對應div,往下查找特殊的能唯一標識元素位置的節點
最終的Xpath長這樣:
//div[@class="el-select-dropdown el-popper"]//ul[@class="el-scrollbar__view el-select-dropdown__list"]/li/span[contains(text(),"040004")]
下圖為關鍵節點的位置示意圖:
Bingo,終於完美解決,附上對應代碼:
browser.find_element_by_xpath("//div[@class='el-input el-input--suffix']//input[@placeholder='請選擇產品名稱']").click()
time.sleep(3)
browser.find_element_by_xpath('//div[@class="el-select-dropdown el-popper"]//ul[@class="el-scrollbar__view el-select-dropdown__list"]/li/span[contains(text(),"040004")]').click()
長嘆一口氣:
只要大方向正確,那就得多嘗試、不氣餒
加油加油加油!