Selenium WebDriver的使用(三)

Selenium WebDriver支持驱动众多的浏览器,包括PhantomJS、HtmlUnitDriver等无界面浏览器,他们速度快,但在兼容性上还是有点问题,有时会遇到页面JS执行错误,在一些应用场合,页面内容提取也不够简洁方便。

对于常用的桌面浏览器,兼容性很好,但在执行性能上较无界面浏览器要差一些。一是由于需要开启实体的浏览器加载页面的所有资源并进行页面渲染,这将大量消耗CPU及内存资源,在做多线程并发时尤为明显;二是由于通过浏览器的API进行页面内容的查找提取(Selenium RC是通过JS注入的方式实现的),性能受浏览器制约。那么在使用桌面浏览器进行网页的自动化测试、内容抓取时,提供一些提高性能的方法和建议:

取消不必要的消耗资源的配置,尽可能少的打开关闭操作浏览器窗口,及时关闭不必要的窗口,并始终保持浏览器窗口的最小化。

webDriver对浏览器窗体可以实现指定屏幕坐标位置、窗体尺寸、最大化,但无法最小化浏览器窗口:

1 webDriver.manage().window().setPosition(new Point(0, 0));//指定窗口坐标
2 webDriver.manage().window().setSize(new Dimension(1280,800));//指定窗口大小
3 webDriver.manage().window().maximize();//最大化窗口

如果使用的是Google Chrome,可通过添加command line flag实现:

1 options.addArguments("--window-position=0,0");//指定窗口坐标
2 options.addArguments("--window-size=1280,800");//指定窗口大小
3 options.addArguments("-start-maximized");//最大化窗口
4 options.addArguments("--start-fullscreen");//全屏

同样,该方式也不提供将窗口最小化的方法。(如果需要调整窗口,建议通过command line flag实现,在打开浏览器时一步到位了,webDriver.manage是在打开浏览器窗口后再执行调整的)

最小化浏览器窗口需要另行编程实现。一种通过AutoIt脚本的快速实现方法:

1    $aWinList = WinList("[REGEXPTITLE:(?i)(.*Google Chrome.*)]")
2    For $i = 1 To $aWinList[0][0]
3       If BitAND(WinGetState($aWinList[$i][1]), 2) Then
4         WinSetState($aWinList[$i][1], "", @SW_MINIMIZE)
5         WinSetState($aWinList[$i][1], "", @SW_HIDE)
6       EndIf
7    Next

监控并关闭弹窗,Google Chrome默认就开启了屏蔽,但不可靠,可以通过“--disable-popup-blocking”关闭屏蔽功能。

删除占用资源的遗留临时文件、进程等,代码略。

最小化浏览器窗口可以降低浏览器对CPU的占用,特别是在大型的含有大量动画元素的页面上。

一些使用了lazy load或异步加载内容的页面,为了可靠获取页面元素,可以在页面加载完成后通过action.clickAndHold()、js.executeScript()的途径,执行触发动作。

通过循环进行元素查找,要尽可能快的返回查找结果,减少对webElement的所有操作。遍历findElements()返回的webElements,使用foreach总是从最高节点开始查找,在逾期内部子节点更可能命中时,应该改为反向遍历。

优先使用cssSelector并尽可能缩小查找范围,使用xpath速度会较慢。(Google Chrome v49实测也没慢多少 !-_-)

如何获取Request和Response信息?

待续!

原创文章,转载请标明出处。

时间: 2024-10-08 16:17:51

Selenium WebDriver的使用(三)的相关文章

selenium webdriver 学习笔记(三)

selenium webdriver 一.上传文件操作 上传文件夹一般要打开一个本地窗口,从窗口选择本地文件添加.所以一般会卡在如何操作本地窗口添加上传文件. 其实,在selenium webdriver没我们 想的那么复杂.只要定位到上传按钮,通过send_keys添加本地文件path就可以了.绝对path和相对path都可以,关键是上传文件存在. 示例: from selenium import webdriver import os,time #脚本要与测试html同一目录 file_pa

selenium webdriver学习(三)---通过linktext定位

linktext就是链接文本,我们可以通过linktext来查找元素 一.问题场景 在html中,<a>标签代表的是链接,以csdn网站为例 以红框所示的为例,href代表的该链接被单击之后的跳转地址,selenium通过文本信息查找元素 二.代码实现 三.实现原理 1.首先打开相应的网址 2.通过文本信息定位到该链接 3.点击该链接,在新的界面打开csdn的博客链接 四.注意事项 由于找到链接之后,需要进行点击才能跳转,因此不要缺少点击的这个操作 五.类似方法 类似的还有partialLin

python+selenium webdriver 自动化测试(一)

作为一个刚刚接触python,第一次编程,第一次试着去做自动化的小渣渣,借此地来见证自己的进步,也许每一步对于别人来说微不足道, 但是对于自己来说,是无数次思考之后才能迈出的一步,很吃力,也同样很欣慰.废话不多说,进入主题. 我用的是python+selenium webdriver来搭建自动化框架,对于python语言,不熟悉,只是粗略的看了一遍书,不知道该编什么,也不知道怎么编,请教大牛后,直接上路,不纠结,实战中可以学会更多.推荐一本书,虫师的<selenium webdriver (py

【转】selenium webdriver三种等待方法

原文:https://www.cnblogs.com/lgh344902118/p/6015593.html webdriver三种等待方法 1.使用WebDriverWait from selenium import webdriver from selenium.webdriver.common.by import By from selenium.webdriver.support.ui import WebDriverWait # available since 2.4.0 from s

(java)selenium webdriver学习---三种等待时间方法:显式等待,隐式等待,强制等待

selenium webdriver学习---三种等待时间方法:显式等待,隐式等待,强制等待 本例包括窗口最大化,刷新,切换到指定窗口,后退,前进,获取当前窗口url等操作: import java.util.Set;import java.util.concurrent.TimeUnit; import org.jsoup.Jsoup;import org.jsoup.nodes.Document;import org.openqa.selenium.By;import org.openqa.

selenium webdriver 的三种等待方式

1.显式等待 一个显式等待是你定义的一段代码,用于等待某个条件发生然后再继续执行后续代码. from selenium import webdriver from selenium.webdriver.common.by import By from selenium.webdriver.support.ui import WebDriverWait # available since 2.4.0 from selenium.webdriver.support import expected_c

Selenium Webdriver元素定位的八种常用方式

在使用selenium webdriver进行元素定位时,通常使用findElement或findElements方法结合By类返回的元素句柄来定位元素.其中By类的常用定位方式共八种,现分别介绍如下. 1. By.name() 假设我们要测试的页面源码如下: <button id="gbqfba" aria-label="Google Search" name="btnK" class="gbqfba"><

Selenium webdriver 学习总结-元素定位

Selenium webdriver 学习总结-元素定位 webdriver提供了丰富的API,有多种定位策略:id,name,css选择器,xpath等,其中css选择器定位元素效率相比xpath要高些,使用id,name属性定位元素是最可靠,效率最高的一种办法. 1.工具选择:在我们开发测试脚本的过程中各个浏览器给我们也提供了方便定位元素的工具,我比较喜欢使用firefox的firebug工具,也是目前很多开发测试人员比较热衷的选择,原因是firefox是唯一能够集成selenium IDE

转:总结Selenium WebDriver中一些鼠标和键盘事件的使用

在使用 Selenium WebDriver 做自动化测试的时候,会经常模拟鼠标和键盘的一些行为.比如使用鼠标单击.双击.右击.拖拽等动作:或者键盘输入.快捷键使用.组合键使用等模拟键盘的操作.在 WebDeriver 中,有一个专门的类来负责实现这些测试场景,那就是 Actions 类,在使用该类的过程中会配合使用到 Keys 枚举以及 Mouse. Keyboard.CompositeAction 等类. 其次,在实际测试过程中,可能会遇到某些按键没办法使用 Actions.Keys 等类来