Selenium WebDriver的使用(三)
2016-03-16 16:17
260 查看
Selenium WebDriver支持驱动众多的浏览器,包括PhantomJS、HtmlUnitDriver等无界面浏览器,他们速度快,但在兼容性上还是有点问题,有时会遇到页面JS执行错误,在一些应用场合,页面内容提取也不够简洁方便。
对于常用的桌面浏览器,兼容性很好,但在执行性能上较无界面浏览器要差一些。一是由于需要开启实体的浏览器加载页面的所有资源并进行页面渲染,这将大量消耗CPU及内存资源,在做多线程并发时尤为明显;二是由于通过浏览器的API进行页面内容的查找提取(Selenium RC是通过JS注入的方式实现的),性能受浏览器制约。那么在使用桌面浏览器进行网页的自动化测试、内容抓取时,提供一些提高性能的方法和建议:
取消不必要的消耗资源的配置,尽可能少的打开关闭操作浏览器窗口,及时关闭不必要的窗口,并始终保持浏览器窗口的最小化。
webDriver对浏览器窗体可以实现指定屏幕坐标位置、窗体尺寸、最大化,但无法最小化浏览器窗口:
如果使用的是Google Chrome,可通过添加command line flag实现:
同样,该方式也不提供将窗口最小化的方法。(如果需要调整窗口,建议通过command line flag实现,在打开浏览器时一步到位了,webDriver.manage是在打开浏览器窗口后再执行调整的)
最小化浏览器窗口需要另行编程实现。一种通过AutoIt脚本的快速实现方法:
监控并关闭弹窗,Google Chrome默认就开启了屏蔽,但不可靠,可以通过“--disable-popup-blocking”关闭屏蔽功能。
删除占用资源的遗留临时文件、进程等,代码略。
最小化浏览器窗口可以降低浏览器对CPU的占用,特别是在大型的含有大量动画元素的页面上。
一些使用了lazy load或异步加载内容的页面,为了可靠获取页面元素,可以在页面加载完成后通过action.clickAndHold()、js.executeScript()的途径,执行触发动作。
通过循环进行元素查找,要尽可能快的返回查找结果,减少对webElement的所有操作。遍历findElements()返回的webElements,使用foreach总是从最高节点开始查找,在逾期内部子节点更可能命中时,应该改为反向遍历。
优先使用cssSelector并尽可能缩小查找范围,使用xpath速度会较慢。(Google Chrome v49实测也没慢多少 !-_-)
如何获取Request和Response信息?
待续!
原创文章,转载请标明出处。
对于常用的桌面浏览器,兼容性很好,但在执行性能上较无界面浏览器要差一些。一是由于需要开启实体的浏览器加载页面的所有资源并进行页面渲染,这将大量消耗CPU及内存资源,在做多线程并发时尤为明显;二是由于通过浏览器的API进行页面内容的查找提取(Selenium RC是通过JS注入的方式实现的),性能受浏览器制约。那么在使用桌面浏览器进行网页的自动化测试、内容抓取时,提供一些提高性能的方法和建议:
取消不必要的消耗资源的配置,尽可能少的打开关闭操作浏览器窗口,及时关闭不必要的窗口,并始终保持浏览器窗口的最小化。
webDriver对浏览器窗体可以实现指定屏幕坐标位置、窗体尺寸、最大化,但无法最小化浏览器窗口:
webDriver.manage().window().setPosition(new Point(0, 0));//指定窗口坐标 webDriver.manage().window().setSize(new Dimension(1280,800));//指定窗口大小 webDriver.manage().window().maximize();//最大化窗口
如果使用的是Google Chrome,可通过添加command line flag实现:
options.addArguments("--window-position=0,0");//指定窗口坐标 options.addArguments("--window-size=1280,800");//指定窗口大小 options.addArguments("-start-maximized");//最大化窗口 options.addArguments("--start-fullscreen");//全屏
同样,该方式也不提供将窗口最小化的方法。(如果需要调整窗口,建议通过command line flag实现,在打开浏览器时一步到位了,webDriver.manage是在打开浏览器窗口后再执行调整的)
最小化浏览器窗口需要另行编程实现。一种通过AutoIt脚本的快速实现方法:
$aWinList = WinList("[REGEXPTITLE:(?i)(.*Google Chrome.*)]") For $i = 1 To $aWinList[0][0] If BitAND(WinGetState($aWinList[$i][1]), 2) Then WinSetState($aWinList[$i][1], "", @SW_MINIMIZE) WinSetState($aWinList[$i][1], "", @SW_HIDE) EndIf Next
监控并关闭弹窗,Google Chrome默认就开启了屏蔽,但不可靠,可以通过“--disable-popup-blocking”关闭屏蔽功能。
删除占用资源的遗留临时文件、进程等,代码略。
最小化浏览器窗口可以降低浏览器对CPU的占用,特别是在大型的含有大量动画元素的页面上。
一些使用了lazy load或异步加载内容的页面,为了可靠获取页面元素,可以在页面加载完成后通过action.clickAndHold()、js.executeScript()的途径,执行触发动作。
通过循环进行元素查找,要尽可能快的返回查找结果,减少对webElement的所有操作。遍历findElements()返回的webElements,使用foreach总是从最高节点开始查找,在逾期内部子节点更可能命中时,应该改为反向遍历。
优先使用cssSelector并尽可能缩小查找范围,使用xpath速度会较慢。(Google Chrome v49实测也没慢多少 !-_-)
如何获取Request和Response信息?
待续!
原创文章,转载请标明出处。
相关文章推荐
- 树莓派3 CentOS7 下载 Raspberry Pi Model 3 B
- 网易公开课《Linux内核分析》学习心得-使用库函数API和C代码中嵌入汇编代码两种方式使用同一个系统调用
- hadoop2.4.1源码在64位系统编译过程中遇到的几个错误及解决方法
- Linux sed指令
- Linux同步工具:rsync
- 关于多维数组动态开辟空间的一些疑问
- 深入理解Oracle的并行操作【好文认真读】
- JS tab切换事件
- 自定义MVC框架
- LeetCode: 7. Reverse Interger【java 解题】
- sql注入问题
- Oracle学习笔记(五)
- Java格式化日期
- 单元测试UnitTest
- Nginx分发高级配置
- FFMPEG视音频编解码零基础学习方法
- 几种编码之间的关系
- Makefile经典教程(掌握这些足够)
- 蓝桥杯常用算法知识点:【递归】求两个串的最大公共子序列的长度
- android 常见的补间动画