加速IE浏览器自动化执行效率:Selenium自动化中DOM,XPATH,CSS定位Web页面对象的优劣性分析

1.技术背景       在Web应用中,用户通过键盘在输入框中输入值和鼠标点击按钮,链接等。比如在用户名输入框和密码输入框输入正确的用户名和密码,然后点击登录按钮进行登录。在Selenium自动化中,Selenium提供多种API来对HTML元素进行操作,对于每个HTML元素,需要一个可以标识它的标识符,在Selenium中称之为定位器,Selenium支持多种不同类型的定位器,有标识符,Id,Name, DOM Locator,XPath Locator, 以及CSS Locator等。本文主要讨论DOM, XPATH,以及CSS定位器在不同的浏览器中的使用的优缺点以及注意事项。

2.问题与挑战       针对一个使用Selenium RC的Web自动化项目,在项目初期在Firefox上采用了比较灵活,简洁的XPath定位器来对应用中的对象进行操作。但在项目开展到1/3时,增加了对IE浏览器支持的需求。在使用现有基于XPath的脚本运行后,发现脚本运行时间呈现几十上百倍地增加,在Firefox上执行花费1分钟的脚本在IE上会花费10~20分钟,甚至更长的时间。该问题就导致了在IE上直接运行之前已完成脚本变得不可行。要了解到Firefox支持原生的Xpath解析功能,而IE不支持原生的Xpath解析,而是基于一个外部的javascript library(Google's library)来进行Xpath解析。由于需求是要求脚本能够同时支持Firefox和IE浏览器,所以需要寻求另外一种方式来使得在不同浏览器上调用Selenium API所执行时间相当。

3.解决方案       在Selenium RC 0.9.2中,用以解析XPath的javascript库在IE上执行的时间增加了脚本执行时间,而且在越复杂的页面中,在IE上调用API所占用的时间越长。于是决定换用其它类型的定位器,由于该被测Web应用中大多数HTML元素未指定有ID和Name属性,所以在这里首先采用比较灵活的Dom定位器进行测试

使用Dom定位器来对HTML元素定位,该Locator表达式需要以“dom=” 或者是“document.”开头的形式,Selenium会执行这段javascript片断来最终地取得我们需要访问的HTML元素,由此在Dom定位器中,可以使用Web页面中的DOM对象来获取文档内的所有HTML元素。 需要注意一点的是,Selenium执行这段javascript片断的时候,是采用整段javascript脚本执行的值,也即是在这段javascript片断中最后一个表达式的值。

使用Dom定位器后,在IE上脚本执行的时间比使用Xpath的时候短很多,基本上跟在Firefox上面所花费的时候基本相当。

Selenium自动化中DOM,XPATH,CSS定位Web页面对象的优劣性分析的更多相关文章

  1. Selenium2学习-027-WebUI自动化实战实例-025-JavaScript 在 Selenium 自动化中的应用实例之三(页面滚屏,模拟鼠标拖动滚动条)

    日常的 Web UI 自动化测试过程中,get 或 navigate 到指定的页面后,若想截图的元素或者指定区域范围不在浏览器的显示区域内,则通过截屏则无法获取相应的信息,反而浪费了无畏的图片服务器资 ...

  2. 【Python + Selenium断言】之如何获取定位Web页面列表中的数据

    如下图所示: 当定位元素时,我想获取指定的某一列的某一行的断言,如图我只想获取jiancha1的值,有同学会说:直接定位不就好了.但是我们知道,列表的数据会时刻变动的,不能靠定死的路径,那该怎么办呢? ...

  3. 在Selenium Webdriver中使用XPath Contains、Sibling函数定位

    前言 在一般情况下,我们通过简单的xpath即可定位到目标元素,但对于一些既没id又没name,而且其他属性都是动态的情况就很难通过简单的方式进行定位了. 在这种情况下,我们需要使用xpath1.0内 ...

  4. Selenium2学习-011-WebUI自动化实战实例-009-JavaScript 在 Selenium 自动化中的应用实例之一(赋值)

    通常在编写 Selenium 的 WebUI 自动化脚本时,有些元素不易定位元素,或有些元素为隐藏的(此时用 WebElement.getText() 获取其值的时候,返回的结果为空),对日常的 UI ...

  5. Selenium2学习-036-WebUI自动化实战实例-034-JavaScript 在 Selenium 自动化中的应用实例之六(获取 JS 执行结果返回值)

    Selenium 获取 JavaScript 返回值非常简单,只需要在 js 脚本中将需要返回的数据 return 就可以,然后通过方法返回 js 的执行结果,方法源码如下所示: /** * Get ...

  6. Selenium2学习-032-WebUI自动化实战实例-030-JavaScript 在 Selenium 自动化中的应用实例之五(高亮标示元素)

    在自动化脚本编写过程中,操作元素之前,需要对元素进行高亮显示(通过修改元素的边框样式),同时进行截图,以记录操作的元素对象.在实际应用中较为少见,通常用于演示,或者发生错误时的屏幕截图捕捉,用于错误报 ...

  7. Selenium2学习-031-WebUI自动化实战实例-029-JavaScript 在 Selenium 自动化中的应用实例之四(获取元素位置和大小)

    通过 JS 或 JQuery 获取到元素后,通过 offsetLeft.offsetTop.offsetWidth.offsetHeight 即可获得元素的位置和大小,非常的简单,直接上源码了,敬请参 ...

  8. Selenium2学习-022-WebUI自动化实战实例-020-JavaScript 在 Selenium 自动化中的应用实例之二(获取浏览器显示区域大小)

    前几篇文章中简略概述了,如何获取.设置浏览器窗口大小,那么我们该如何获取浏览器显示区域的大小呢?此文讲对此进行简略概述,敬请各位小主参阅.若有不足之处,敬请各位大神指正,不胜感激! 获取浏览器显示区域 ...

  9. python中通过selenium简单操作及xpath元素定位&轴定位

    浏览器的简单操作 # 导入webdriver模块 # 创建driver对象,指定Chrome浏览器 driver = webdriver.Chrome() # 窗口最大化 driver.maximiz ...

随机推荐

  1. 《C++代码设计与重用》 书评

    作者:唐风 主页:www.cnblogs.com/liyiwen   前几个星期买了,一直没有直接细翻,买的时候看了背面的两个推荐,一个是孟岩,一个是Scott Meyers(Effective C+ ...

  2. 移动端学习系列1--meta标签

    <!-- 是否启动webapp功能,会删除默认的苹果工具栏和菜单栏 --><meta name="apple-mobile-web-app-capable" co ...

  3. POJ 1191 棋盘分割

    棋盘分割 Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 11213 Accepted: 3951 Description 将一个 ...

  4. 用 Java 实现断点续传 (HTTP)

    断点续传的原理 其实断点续传的原理很简单,就是在 Http 的请求上和一般的下载有所不同而已. 打个比方,浏览器请求服务器上的一个文时,所发出的请求如下: 假设服务器域名为 wwww.sjtu.edu ...

  5. hiho一下第88周《Coordinates》

    题目大意 给定数字P,Q,求出所有P和Q的约数p,q能够组成的不重复数字对(p,q) 解题思路 作为本场比赛的第一题,本题的难度在于考察选手是否有基本的编程能力. 本题中需要求出P,Q所有约数组成的数 ...

  6. 深入了解PooledConnectionFactory CachingConnectionFactory Sin

    深入理解PooledConnectionFactory CachingConnectionFactory SingleConnectionFactory PooledConnectionFactory ...

  7. 深入学习微框架:Spring Boot - NO

    http://blog.csdn.net/hengyunabc/article/details/50120001 Our primary goals are: Provide a radically ...

  8. jquery check box

    if ($("#eulaLine").is(':checked')) { var mobile = $("#mobile").val(); if (mobile ...

  9. svn 设置

    \Release *\Debug *\bin *\Bin *\obj *\_ReSharper* *\.hg *.ReSharper *.resharper *\Generated_Code *\VB ...

  10. Linux下RPM、tar.gz、DEB格式软件包的区别

      初接解Linux的朋友一定对软件的安装特别头疼,同样都是for Linux,但RPM.tar.gz.DEB包还是有很大区别的,这种区别很有可能使你的安装过程进行不下去.那我们应该下载什么格式的包呢 ...