JavaScript的处理
在自动化过程中,遇到js处理的元素,需要使用js语言对元素进行操作,例如,滑动到浏览器的底部或者顶部,时间控件的处理,元素可见不可见以及富文本的处理等,都需要js语言的支持,在selenium中,对js脚本的调用方法是execute_script.下面结合实例来讲述。
元素不可见的操作
处理方法是用js把隐藏的显示出来,方法如下:
js="document.getElementById('li').style.display='block';"
driver.execute_script(js)
浏览器滑动操作
以百度搜索为例子,分别操作滑动到底部,滑动到顶部操作,代码如下:
from selenium import webdriver
import time
driver = webdriver.Chrome()
driver.implicitly_wait(30)
driver.maximize_window()
driver.get("http://www.baidu.com")
driver.find_element_by_id("kw").send_keys("selenium")
driver.find_element_by_id("su").click()
time.sleep(4)
''' 进行滑动操作,滑动到底部'''
downjs = "var q=document.documentElement.scrollTop=10000"
driver.execute_script(downjs)
''' 点击下一页,进入到第二页'''
driver.find_element_by_partial_link_text("下一页").click()
'''进行滑动操作,滑动到顶部'''
upjs = "var q=document.documentElement.scrollTop=10000"
''' 先执行滑动到底部操作,在滑动到顶部'''
driver.execute_script(downjs)
time.sleep(3)
driver.execute_script(upjs)
time.sleep(2)
driver.quit()
时间控件的处理
时间控件在测试过程中经常遇到,但大部分时间控件都是只读属性,要实现在只读属性的时间控件输入时间,可以先取消时间控件的只读属性,取消只读属性后,在Input输入框输入value即可,操作代码如下:
from selenium import webdriver
import time
driver= webdriver.Chrome()
def startJs(startTime):
'''开始时间中输入自定义的时间'''
js = "$("input[placeholder='开始时间>当前时间']").removerAttr('readonly');"
"$("input[placeholder='开始时间>当前时间']").attr('value',{0})".format(startTime)
driver.execute_script(js)
def endJs(endTime):
'''结束时间输入自定义的时间'''
js = "$("input[placeholder='结束时间>当前时间']").removerAttr('readonly');"
"$("input[placeholder='结束时间>当前时间']").attr('value',{0})".format(endTime)
driver.execute_script(js)
startJs("2019-10-10 10:00:00")
time.sleep(3)
endJs("2019-10-10 10:02:00")