python+selenium十一:jQuery和js語法、js處理iframe python+selenium十一:jQuery和js語法、js處理iframe
python+selenium十一:jQuery和js語法、js處理iframe
selenium 執行jQuery/js語法
driver.execute_script(jQuery/js)
1、jQuery
jQuery只支援css語法:
jquery = '$(CSS).val("XXX");' # 根據css語法定位到元素,輸入內容
jquery = '$(CSS).val('');' # 清空
jquery = '$(CSS).click();' # 點選
# 在某個已經定位的元素上執行 jquery
button = driver.find_element_by_class_name('btn')
driver.execute_script('$(arguments[0]).click()', button)
# Jquery控制瀏覽器內嵌div的滾動條
Jquery = '$(".modal-body").scrollTop(10000)'
driver.execute_script(Jquery)
# Jquery控制瀏覽器的滾動條
Jquery = '$(document).scrollTop(1000)'
driver.execute_script(Jquery)
2、js
1.通過id獲取 document.getElementById(“id”)----------獲取的是單個
2.通過name獲取 document.getElementsByName(“Name”)[0]---------獲取的是多個 返回的是list
3.通過標籤名選取元素 document.getElementsByTagName(“tag”) --------獲取的是多個
4.通過CLASS類選取元素 document.getElementsByClassName(“class”) --------獲取的是多個 相容性:IE8及其以下版本的瀏覽器未實現getElementsByClassName方法
5.通過CSS選擇器選取元素 document.querySelectorAll(“css selector") 相容性:IE8及其以下版本的瀏覽器只支援CSS2標準的選擇器語法
js = 'document.getElementById(xxx).value="XXXX"' # 輸入值
js = 'document.getElementsByClassName("prefpanelgo")[0].click();' # 點選
# 去掉元素的readonly屬性
js = 'document.getElementById("xxx").removeAttribute("readonly");'
driver.execute_script(js)
# 把元素不可見屬性改為可見
js = "document.getElementsByClassName('password')[0].style.display='block'"
driver.execute_script(js)
# 去掉日期控制元件的readonly屬性,並填入日期
js = 'document.getElementById(xxx).removeAttribute("readonly");document.getElementById(xxx).value="20xx-xx-xx"'
driver.execute_script(js)
jquery = '$("#train_date").val("");$("#train_date").val("20xx-xx-xx");$("#query_ticket").click()'
driver.execute_script(jquery)
# 聚焦元素
target = self.find_element(locator)
driver.execute_script("arguments[0].scrollIntoView();", target)
內嵌滾動條:
# 縱向底部
# 獲取id是單個元素,因為一個頁面上id是唯一的
#js = 'document.getElementById("XXXX").scrollTop=10000'
# 獲取的class是多個,取list的第一個物件
# 頂部:scrollTop=0,底部:scrollTop=10000
js0 = 'document.getElementsByClassName("scroll")[0].scrollTop=10000'
driver.execute_script(js0)
# 控制橫向滾動條位置
# 最左邊:scrollLeft=0,最右邊:scrollLeft=10000
js1 = 'document.getElementsByClassName("scroll")[0].scrollLeft=10000'
driver.execute_script(js1)
# js處理iframe
# Js處理iframe無需先切換到iframe上,再切回來操作。 它可以在iframe上和主頁面上來回自由操作-----這是Js的強大之處
js = 'document.getElementById("Editor_Edit_EditorBody_ifr").contentWindow.document.body.innerHTML="%s"' % jstext
driver.execute_script(js)
# innerHTML:插入html文字內容
# 以上js寫法只是專門處理富文字(有iframe)相關的問題,其它地方遇到iframe不一定通用
selenium 執行jQuery/js語法
driver.execute_script(jQuery/js)
1、jQuery
jQuery只支援css語法:
jquery = '$(CSS).val("XXX");' # 根據css語法定位到元素,輸入內容
jquery = '$(CSS).val('');' # 清空
jquery = '$(CSS).click();' # 點選
# 在某個已經定位的元素上執行 jquery
button = driver.find_element_by_class_name('btn')
driver.execute_script('$(arguments[0]).click()', button)
# Jquery控制瀏覽器內嵌div的滾動條
Jquery = '$(".modal-body").scrollTop(10000)'
driver.execute_script(Jquery)
# Jquery控制瀏覽器的滾動條
Jquery = '$(document).scrollTop(1000)'
driver.execute_script(Jquery)
2、js
1.通過id獲取 document.getElementById(“id”)----------獲取的是單個
2.通過name獲取 document.getElementsByName(“Name”)[0]---------獲取的是多個 返回的是list
3.通過標籤名選取元素 document.getElementsByTagName(“tag”) --------獲取的是多個
4.通過CLASS類選取元素 document.getElementsByClassName(“class”) --------獲取的是多個 相容性:IE8及其以下版本的瀏覽器未實現getElementsByClassName方法
5.通過CSS選擇器選取元素 document.querySelectorAll(“css selector") 相容性:IE8及其以下版本的瀏覽器只支援CSS2標準的選擇器語法
js = 'document.getElementById(xxx).value="XXXX"' # 輸入值
js = 'document.getElementsByClassName("prefpanelgo")[0].click();' # 點選
# 去掉元素的readonly屬性
js = 'document.getElementById("xxx").removeAttribute("readonly");'
driver.execute_script(js)
# 把元素不可見屬性改為可見
js = "document.getElementsByClassName('password')[0].style.display='block'"
driver.execute_script(js)
# 去掉日期控制元件的readonly屬性,並填入日期
js = 'document.getElementById(xxx).removeAttribute("readonly");document.getElementById(xxx).value="20xx-xx-xx"'
driver.execute_script(js)
jquery = '$("#train_date").val("");$("#train_date").val("20xx-xx-xx");$("#query_ticket").click()'
driver.execute_script(jquery)
# 聚焦元素
target = self.find_element(locator)
driver.execute_script("arguments[0].scrollIntoView();", target)
內嵌滾動條:
# 縱向底部
# 獲取id是單個元素,因為一個頁面上id是唯一的
#js = 'document.getElementById("XXXX").scrollTop=10000'
# 獲取的class是多個,取list的第一個物件
# 頂部:scrollTop=0,底部:scrollTop=10000
js0 = 'document.getElementsByClassName("scroll")[0].scrollTop=10000'
driver.execute_script(js0)
# 控制橫向滾動條位置
# 最左邊:scrollLeft=0,最右邊:scrollLeft=10000
js1 = 'document.getElementsByClassName("scroll")[0].scrollLeft=10000'
driver.execute_script(js1)
# js處理iframe
# Js處理iframe無需先切換到iframe上,再切回來操作。 它可以在iframe上和主頁面上來回自由操作-----這是Js的強大之處
js = 'document.getElementById("Editor_Edit_EditorBody_ifr").contentWindow.document.body.innerHTML="%s"' % jstext
driver.execute_script(js)
# innerHTML:插入html文字內容
# 以上js寫法只是專門處理富文字(有iframe)相關的問題,其它地方遇到iframe不一定通用