Python Selenium自动化(三)Chrome Webdriver的兼容

简介:
当一个自动化测试被实现在一个浏览器之后,我们会希望我们的测试能够覆盖到尽量多的别的浏览器。通过跨平台的测试来保证我们的程序在多个浏览器下都能正常工作。
  在安装了selenium之后,firefox webdriver和IE webdriver就已经是ready to use的了,但是如果想要在Chrome下进行测试的话需要再安装Chrome webdriver。Chrome webdriver是由Chromium项目自己维护的,因此在实现上也和Firefox driver以及IE driver有一些不同之处。这就导致了在将在Firefox上可以正常运行的测试代码运用到chrome时会产生一些兼容性的问题。
  1. WebDriverWait的可靠性
  上一篇博客提到过,当页面上有使用ajax异步加载的元素的时候,为了确保对元素进行操作的时候该元素已经处在一个可用的状态下了,我们可以使用WebDriverWait来使driver等待至目标元素满足给出的条件时才继续下面的操作。但是在Chrome中,这个方法似乎不是总是适用。
  2.一些奇怪的异常
  总的来说,测试代码在Chrome下的运行是非常快的,至少人眼就可以感觉出来比Firefox下的运行速度要快一点,当然这是在不报异常的情况下。而实际情况是,在Firefox下可以正常运行的代码,在Chrome下却会出现问题,并且抛出一些奇怪的异常:
selenium.common.exceptions.WebDriverException: Message: u'unknown error: Element is not clickable at point
selenium.common.exceptions.InvalidElementStateException: Message: u'invalid element state
selenium.common.exceptions.ElementNotVisibleException: Message: u'element not visible
  第一个异常的抛出一般会发生在radio button的点击事件上,但是一般异常抛出的同时,系统会告诉你当前的element不可以被点击,但是另外的某个元素可以接受这个点击事件。这时我们可以查看页面上系统给出的备选元素是否也可以满足我们的点击需求,如果可以,我们可以简单的把radio button换成这个备选元素来回避这个异常。
  另外,这三个异常都与Chrome的运行速度以及WebDriverWait的可靠性有一定关系。因此,我们可以稍显“粗暴”的让webdriver休眠一段时间来slow down测试代码的执行速度,强制driver等待一个固定的时间来让元素加载完成。
  import time
  #some test code
  time.sleep(2)
  #continue test code
  time.sleep(2)会使driver休眠两秒,然后再继续执行后面的测试代码
  3.不在当前视图范围内的元素的操作
  当我们使用Firefox webdriver来测试某个页面的时候,如果我们选取了某个页面元素来对其进行操作,但是这个元素不在当前浏览器显示的视图范围内,Firefox webdriver的做法是自动的将视图调整到该元素显示的区域,然后对这个元素进行操作。也就是说driver自己完成了页面的scroll down or up的操作。
  但是在Chrome webdriver中,如果待操作元素不在视图显示范围内,则会抛出Element is not clickable at point异常。或是如果设置了WebDriverWait并且它正常工作的话会抛出Timeout异常。
  因此,在使用Chrome wbedriver的时候,我们要更加小心,对于需要滚动页面才能显示在视图中的元素,我们需要添加代码使页面滚动至元素显示的范围,然后再对该元素进行操作。使页面滚动的方法是:
  driver.execute_script("window.scrollBy(0,200)","")  #向下滚动200px
  driver.execute_script("window.scrollBy(0,document.body.scrollHeight)","")  #向下滚动到页面底部


最新内容请见作者的GitHub页:http://qaseven.github.io/
相关文章
|
Web App开发 存储 前端开发
Python+Selenium自动化爬取携程动态加载游记
Python+Selenium自动化爬取携程动态加载游记
|
Python
自动化微信朋友圈:Python脚本实现自动发布动态
本文介绍如何使用Python脚本自动化发布微信朋友圈动态,节省手动输入的时间。主要依赖`pyautogui`、`time`、`pyperclip`等库,通过模拟鼠标和键盘操作实现自动发布。代码涵盖打开微信、定位朋友圈、准备输入框、模拟打字等功能。虽然该方法能提高效率,但需注意可能违反微信使用条款,存在风险。定期更新脚本以适应微信界面变化也很重要。
1798 61
自动化微信朋友圈:Python脚本实现自动发布动态
|
Web App开发 数据采集 JavaScript
CDP与Selenium相结合——玩转网页端自动化数据采集/爬取程序
本文介绍了Selenium、Chrome DevTools及Chrome DevTools Protocol (CDP) 的基本功能与应用。Selenium是一款开源自动化测试工具,适用于网页端应用程序测试和数据采集,具备跨平台特性。Chrome DevTools内置浏览器中,提供调试、分析Web应用程序的功能,包括元素、控制台、源代码和网络选项卡等。CDP是一套用于与Chromium内核浏览器通信的API,支持自动化测试和性能分析。文中还展示了Selenium与CDP结合使用的示例,如捕获网络请求数据和打印网页内容,并推荐了相关书籍和资源以供深入学习。
2464 39
CDP与Selenium相结合——玩转网页端自动化数据采集/爬取程序
|
Web App开发 IDE JavaScript
Selenium IDE:Web自动化测试的得力助手
Selenium IDE:Web自动化测试的利器。作为开源工具,Selenium IDE支持录制与回放用户操作,适用于Chrome、Firefox等多浏览器,简化了测试流程,提升了效率,降低了自动化测试的门槛。它还支持导出多种编程语言的脚本,便于测试集成与复用。
655 31
Selenium IDE:Web自动化测试的得力助手
|
Web App开发 人工智能 JSON
AutoMouser:AI Chrome扩展程序,实时跟踪用户的浏览器操作,自动生成自动化操作脚本
AutoMouser是一款Chrome扩展程序,能够实时跟踪用户交互行为,并基于OpenAI的GPT模型自动生成Selenium测试代码,简化自动化测试流程。
1494 17
AutoMouser:AI Chrome扩展程序,实时跟踪用户的浏览器操作,自动生成自动化操作脚本
|
Web App开发 IDE 测试技术
Selenium:强大的 Web 自动化测试工具
Selenium 是一款强大的 Web 自动化测试工具,包括 Selenium IDE、WebDriver 和 Grid 三大组件,支持多种编程语言和跨平台操作。它能有效提高测试效率,解决跨浏览器兼容性问题,进行性能测试和数据驱动测试,尽管存在学习曲线较陡、不稳定等缺点,但其优势明显,是自动化测试领域的首选工具。
1537 17
Selenium:强大的 Web 自动化测试工具
|
Web App开发 数据采集 JavaScript
Chrome浏览器实例的TypeScript自动化脚本
Chrome浏览器实例的TypeScript自动化脚本
|
敏捷开发 测试技术 持续交付
自动化测试之美:从零开始搭建你的Python测试框架
在软件开发的马拉松赛道上,自动化测试是那个能让你保持节奏、避免跌宕起伏的神奇小助手。本文将带你走进自动化测试的世界,用Python这把钥匙,解锁高效、可靠的测试框架之门。你将学会如何步步为营,构建属于自己的测试庇护所,让代码质量成为晨跑时清新的空气,而不是雾霾中的忧虑。让我们一起摆脱手动测试的繁琐枷锁,拥抱自动化带来的自由吧!
|
运维 监控 网络安全
自动化运维的崛起:如何利用Python脚本简化日常任务
【10月更文挑战第43天】在数字化时代的浪潮中,运维工作已从繁琐的手工操作转变为高效的自动化流程。本文将引导您了解如何运用Python编写脚本,以实现日常运维任务的自动化,从而提升工作效率和准确性。我们将通过一个实际案例,展示如何使用Python来自动部署应用、监控服务器状态并生成报告。文章不仅适合运维新手入门,也能为有经验的运维工程师提供新的视角和灵感。
|
运维 监控 Python
自动化运维:使用Python脚本简化日常任务
【10月更文挑战第36天】在数字化时代,运维工作的效率和准确性成为企业竞争力的关键。本文将介绍如何通过编写Python脚本来自动化日常的运维任务,不仅提高工作效率,还能降低人为错误的风险。从基础的文件操作到进阶的网络管理,我们将一步步展示Python在自动化运维中的应用,并分享实用的代码示例,帮助读者快速掌握自动化运维的核心技能。
878 3

推荐镜像

更多