一、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((定位方式,定位表达式))
判断某个元素的选中状态是否符合预期