写点什么

使用 Selenium 执行 JavaScript 脚本:探索 Web 自动化的新领域

  • 2024-03-21
    北京
  • 本文字数:1687 字

    阅读完需:约 6 分钟

前言

在我们使用 selenium 进行自动化测试的时候,selenium 能够帮助我们实现元素定位和点击输入等操作,但是有的时候,我们会发现,即使我们的元素定位没有问题,元素也无法执行操作;也有部分情况是我们无法直接定位滚动条河时间控件来进行操作,这个时候,我们就需要借助 JavaScript 来解决问题。本文就来给大家介绍一下 selenium 如何执行 JavaScript 脚本,以及这种方法的一些常见应用场景和最佳实践。


获取更多技术资料,请点击!

Selenium 中调用 js

在 Selenium 中主要使用以下函数来调用 js:


execute_script(script, *args)
复制代码


  • 说明:在当前窗口/框架中同步执行 JavaScript。

  • 参数:

  • script:被执行的 js 脚本

  • *args:被执行的 js 脚本中使用的参数

  • 使用方法:

  • driver.execute_script('return document.title;')

  • 注意: js 脚本中return document.title;中使用 return 可以获取 js 脚本返回的结果

  • 源码:


    def execute_script(self, script, *args):        converted_args = list(args)        command = None        if self.w3c:            command = Command.W3C_EXECUTE_SCRIPT        else:            command = Command.EXECUTE_SCRIPT
return self.execute(command, { 'script': script, 'args': converted_args})['value']
复制代码

使用 js 完成滑动操作

当页面显示的数据较多,需要点击底部的对象时,需要把鼠标移动到底部,才可以点击对象。


场景说明:


当我们在百度上搜索一个内容时,内容较多,我们想查看完整的页面需要滑动到页面底部。代码如下:



import timefrom selenium import webdriver

class TestJs: def setup(self): self.driver=webdriver.Chrome() self.driver.maximize_window() self.driver.implicitly_wait(5)
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") # 使用JS定位搜索按钮,点击搜索 ele_search = self.driver.execute_script('return document.getElementById("su")') ele_search.click() # 将搜索页面滑动至最下方 self.driver.execute_script('document.documentElement.scrollTop=10000') time.sleep(3) # 点击下一页 self.driver.find_element_by_xpath('//*[@id="page"]/div/a[10]').click() time.sleep(3) #打印js脚本执行后的返回结果 #返回页面标题 print(self.driver.execute_script('return document.title')) #返回performance.timing print(self.driver.execute_script('return JSON.stringify(performance.timing)'))
复制代码

使用 js 操作时间控件

大部分时间空间都是 readonly 属性,需要手动去选择对应的时间,手工测试中很容易做到,自动化中对控件的操作可以使用 js 完成,我们需要先移除 readonly 属性,再给 value 赋值,具体代码如下:


Class TestJs:    def setup(self):        self.driver=webdriver.Chrome()        self.driver.maximize_window()        self.driver.implicitly_wait(5)
def teardown(self): self.driver.quit() def test_js_datetime(self): # 打开网址 self.driver.get('https://www.12306.cn/') time.sleep(3) # 定位时间元素;进行readonly属性去除操作;赋值新日期 # 注意:可以合并执行JS方法的写法 self.driver.execute_script( 'a=document.getElementById("train_date");a.removeAttribute("readonly");a.value="2024-3-20"') time.sleep(3)
复制代码

总结

通过使用 Selenium 执行 JavaScript 脚本,我们可以更灵活地操作根级别文档和时间控件,提高了测试的效率和准确性。在实际应用中,开发者可以根据具体需求,灵活运用 JavaScript 脚本来优化自动化测试和网页操作,从而更好地满足项目需求。

用户头像

社区:ceshiren.com 微信:ceshiren2021 2019-10-23 加入

微信公众号:霍格沃兹测试开发 提供性能测试、自动化测试、测试开发等资料,实时更新一线互联网大厂测试岗位内推需求,共享测试行业动态及资讯,更可零距离接触众多业内大佬。

评论

发布
暂无评论
使用Selenium执行JavaScript脚本:探索Web自动化的新领域_霍格沃兹测试开发学社_InfoQ写作社区