一、js操作元素
① js操作瀏覽器滾動條
js
"window.scrollTo(0,document.body.scrollHeigh t);"
driver.execute_script(js)
2)滾動到頂部
js = "window.scrollTo(0,0);"
driver.execute_script(js)
3) 滾動到元素出現的位置(聚焦元素)
target = driver.find _element(By.id, "xxx))
js = "arguments[0].scrollintoView();"
driver.execute_script(js, target)
② js獲取元素的幾種方法
1) 通過id獲取(獲取到的是單個元素)
document.getElementByld('xxx')
2)通過name獲取(獲取到的是多個元素,取第一個)
diocument.getElementsByName('xxx')[0]
3) 通過標簽獲取(獲取到的是多個元素,取第一個)
document.getElementsByTagName('xxx')[0]
4)通過class獲取(獲取到的是多個元素,取第一個)
document.getElementsByClassName('xxx')[0]
5) 通過css選擇器獲取
document.querySelector('css表達式”)
③js處理有iframe的富文本 text=“ 需要輸入的文本內容”
js
”document.getElementByld( *xxx' ).contentWindow.
document.body.innerHTM =' %S ;”% text
driver .execute_ script(js)
js處理有iframe的富文本無需先切換到iframe.上,再切回來操作,它可以在iframe和主頁面來回自由操作。
注意:以上js方法只是專門處理有iframe的富文本,其它地方遇到iframe不一定通用。
④js處理有iframe的普通元素
document. getElementByld(iframeid).contentWindow.
document.getElementByld(元素的id)
⑤js操作有readonly屬性的日歷控件
在例如12306網站上對日期的操作,進行如下步驟
1)去除元素的readonly屬性
2) 執行JS腳本
3)清空輸入框
4)輸入時間
js1 =document.getElementByld( train_ date '). removeAttribute( readonly );"
driver .execute_ script(js1)
driver.find_ element_ by_ id( 'train_ date' ).clear()
driver.find_ element_ by_ id( 'train_ _date ).send_ ke ys('2020- -06- -01')
te HEISEvalue lt
js2
document.getElementByld( 'train_ _date' ).value= '2020-06- -01'"
driver.execute_ script(js2)⑥js操作內嵌div滾動條
先定位div的位置,再通過scrollTop和scroll eft方法控制進度。
控制縱向滾動條位置:
“document.getElementByld( xxx’).scrollTop=10000;"
driver.execute_ script(js)控制橫向滾動條位置:
“document.getElementByld( 'xXX ).scroll _eft=10000;”
driver .execute_ script(js)
⑦js解決click失效問題
方法一:先點擊父元素,找回焦點,再點擊子元
driver.find_ element(By.id,‘父元素id’).click() driver.fnd_ element(By.id ,子元素id ).click()方法二:用js直接去點擊
js =“document.getElementByld( *xxx ).click();' driver. execute_ script(js)
方法三: jquery語法去點擊
jq =“$( css表達式).click()”
driver.execute_ script(jq)二、元素判斷方法
①is_ _displayed() 判斷元素是否可見,返回布爾值
元素在頁面上有三種狀態:
1)不在dom對象里,也就是不存在這個元素;
2)在dom對象里,是隱藏元素,在頁面上不可 見,用is_ displayed()方法判斷,返回False;
3)在dom對象里,是顯示元素,在頁面上可見, 用is_ displayed()方 法判斷,返回True。
S
置”)
driver .find_ element_ by_ _link_ text(“搜索設
print(S.is_ displayed()) --- 判斷“搜索設置 ”是否可見
②is_ selected() 判斷select下拉框、單選框和復選框是否被選擇,返回布爾值
③is_ enabled 判斷元素是否可以被點擊,可以輸入文本,返回布爾值
三、expected_ conditions(EC)模塊 提供的元素判斷方法
①導入模塊
From selenium.webdriver .support expected_ conditions as EC
import
②判斷方法
1) EC.title_ _is(預期title)(driver)判斷預期title與實際title是否相等。
2) EC.title_ _contains(預期title)(driver)判斷預期title是否包含于實際title.
3) EC.text_ to_ be_ present in_ element(元素定位,預期元素文本)(driver)
判斷預期元素文本與實際元素文本是否相等
4) EC.text to_ _be_ present _in element. value(元素定位,預期value屬性)(driver)
判斷元素的預期value屬性與實際value屬性是否相等
5) EC.alert_ is_ present()(driver)判斷當前是否有alert彈框
6) EC.present of _element _located((定位方式,定位表達式))
判斷元素是否存在
7 ) EC.visibility_ of_ _element_ located(( 定位方式,定位表達式))
判斷元素是否可見
8) EC.presence_ of_ _all elements_ located((定 位方式,定位表達式))
判斷是否至少有1個元素存在舉個例子:
如果頁面上有n個元素的class都是“cloumn3”,那么只要有1個元素存在,這個方法就返回True。
EC.frame_ to_ be_ available_ and _switch_ _to_ it()
判斷該frame是否可以switch進去,如果可以,返 回True并且switch進去,否則返回False 。
10) EC.invisibility_ of _element_ located((定 位方式,定位表達式))
判斷元素是否不可見或不存在
11) EC.element to_ be_ _clickablel(定位方式,定位表達式))
判斷元素是否可見并且可操作(如可被點擊) 12) EC.staleness_ of((定位方式,定位表達式))
等某個元素從dom對象中移除
13) EC.element_ to_ be_ selected((定位方式, 定位表達式))
判斷select下拉框是否被選中
14) EC.element_ selection_ state. to be((定位方式,定位表達式))
判斷某個元素的選中狀態是否符合預期