Selenium自動化測試(八)之js處理控件操作

像上面這種使用了日期控件,並且輸入框是設置的只讀,在做自動化的時候,對於這種我們該如何去做呢?
1、模擬人工點開控件選擇日期(不建議使用)
2、跳過該控件,直接輸入日期
顯然上面兩種方式,第一種是相當麻煩不實用的,第二種則是很簡便,下面我們來看下如何跳過日期控件:
一、在谷歌瀏覽器“開發者工具中”的可控制台Console操作處理日期控件
查看元素屬性(通過xpath進行的元素定位)
bdata = document.evaluate("//label[contains(text(),'出生日期')]//following::input[1]", document).iterateNext()

刪除元素只讀屬性,使得輸入框正常輸入內容
bdata.removeAttribute("readonly")

不更改屬性值,使用value給輸入框賦值
bdata.value="2020-10-23"

直接添加一個value屬性
bdata.setAttribute('value','2020-05-01')

二、在Python中處理日期控件
刪除元素屬性值,添加value值
js = """var bm = document.evaluate(\"//label[contains(text(),'出生日期')]//following::input[1]\", document).iterateNext();
bm.removeAttribute(\"readonly\");
bm.value=\"2020-05-01\""""
driver.execute_script(js)
直接添加輸入內容
js = """var bm = document.evaluate(\"//label[contains(text(),'出生日期')]//following::input[1]\", document).iterateNext();
bm.value=\"2020-05-01\""""
driver.execute_script(js)
直接添加一個value屬性
js = """var bm = document.evaluate(\"//label[contains(text(),'出生日期')]//following::input[1]\", document).iterateNext();
bm.setAttribute('value','2020-05-01')"""
driver.execute_script(js)
我的這個元素定位使用的是XPATH(因為沒有id/class/name這些簡單的,不然我也不會用這么復雜的),當然,你可以選擇id/class/name等進行元素定位(如果有的話)。
這種方法不僅適用於日期控件,還可以適用於所有只讀的輸入框和別的控件。