在做UI自动化的过程中,可以使用selenium直接在当前页面中进行js交互,比如点击,滚动,处理富文本,时间控件,获取页面性能数据等。
语法
使用execute_script方法,直接在文件中导入
execute_script
return
示例
from time import sleep
from selenium import webdriver
class TestJS:
def setup(self):
self.driver = webdriver.Chrome()
self.driver.maximize_window()
self.driver.implicitly_wait(3)
def teardown(self):
self.driver.quit()
def test_js_scroll(self):
self.driver.get("https://www.baidu.com/")
self.driver.find_element_by_id("kw").send_keys("selenium测试")
sleep(2)
ele = self.driver.execute_script("return document.getElementById('su')")
ele.click()
self.driver.execute_script("document.documentElement.scrollTop=10000")
sleep(3)
self.driver.find_element_by_xpath("//*[@id='page']/div/a[10]").click()
sleep(3)
for code in['return document.title','return JSON.stringify(performance.timing)']:
print(self.driver.execute_script(code))
处理时间控件
大部分时间控件都是readonly的,需要手动去选择对应的时间,手工测试中很容易做到,自动化的时候可以使用js来操作 主要思路: 1.取消日期的readonly属性 2.给value赋值 3.用js实现上面两步,再用webdriver对js进行处理
示例
def test_datetime(self):
self.driver.get("https://www.12306.cn/index/")
time_ele = self.driver.execute_script("a=document.getElementById('train_date');a.removeAttribute('readonly')")
self.driver.execute_script("document.getElementById('train_date').value='2021-10-28'")
sleep(3)
print(self.driver.execute_script("return document.getElementById('train_date').value()"))
|