发文章
发文工具
撰写
网文摘手
文档
视频
思维导图
随笔
相册
原创同步助手
其他工具
图片转文字
文件清理
AI助手
留言交流
WebDriver摇身一变成了Selenium2.0,对比与Selenium1.0,它直接调用浏览器核心API的方式,比1.0的JavaScript方式快了,另外它的By的locator也比1.0时的String清晰,Wait某个事件的API也进步了。
但它其他的API就没有1.0方便,但也就这水平,居然搞成了W3C规范的草稿
所以, SpringSide在Test Module里提供了一个Selenium2.java的封装,融合了两者的优点,让API重新变得友好。重新的封装时,参考了它那个向后兼容的WebDriverBackedSelenium的实现。WebDriverBackedSelenium有些地方还是用Javascript来实现的,有些API又没有实现,所以没有直接使用它。
在JVM退出时关闭Selenium。因为每次创建Selenium实体都需要相当的消耗,因此希望在整个测试过程中只启动一次Selenium。 但Junit没有所有测试完毕后执行某函数的概念,因此注册了一个JVM的shutdown hook,在JVM退出时调用selenium的quit()方法。
selenium1.0的waitForPageLoad(timeout)函数没有了,而那些承诺会block住直到页面完全打开的get(url),click(by)函数,在firefox下一点效果没有。
好在有另一个解决方式,implicitlyWait会findByElement()失败时,隐式等待直到Element出现。 这样,就连1.0那句烦人的waitForPage()也省了。
driver.manage().timeouts().implicitlyWait(seconds, TimeUnit.SECONDS);
selenium1.0非常重要的功能,可以在页面出错的一刹那进行截屏,一图胜千言,好过慢慢看log猜在哪一步错了,有时候还猜不出来。 还写了个Junit的Rule,自动化这个过程,在所有Selenium的基类了放入即可。
2.0的driver.get(url)居然必须输入完整路径,不许使用相对路径。只好抄了下兼容函数,如果路径是相对路径时,自动补上baseUrl.
2.0的type不会管input框里原来有没有值,只好自己补一个clean()上去.
2.0没有checkbox的check这个概念,只有isSelected, 又帮它向后兼容了一把。
总算,在处理Select框时,support包里有个org.openqa.selenium.support.ui.Select,里面有一堆丰富的函数可用,如
s.getSelect(by).selectByValue(value); s.getSelect(by).getFirstSelectedOption();
唉, WebElement这个抽象的对象里,getValue需要调用element.getAttribute("value"),封装之。
waitfor是Ajax 测试中很重要的功能,2.0的support包里另一个给力的对象,在Selenium2里封装了waitForTitleIs(title), waitForTitleContains(title),waitForTextPresent(by,text,timeout), waitForValuePresent(by,value,timeout), waitForVisible(by,timeout)
但ExpectedConditions里还有更多更多的条件可以使用,如:
s.waitForCondition(ExpectedConditions.xxxxxx(yyy,zzz), timeout);
跑Jenkins的Linux机器上通常没有XWindows,不能运行真正的浏览器,这时候有两个选择:
一是HtmlUnitDriver,不使用真正的浏览器而是使用HtmlUnit,好处是速度超快(这点很重要),而且不需要XWindow。但它默认是不支持JavaScript的,需要在构造函数或setter函数里设置为true,但不能保证它的行为与浏览器的一样,而且不是100%的Javascript都支持,看运气,比如最新的JQuery1.9.1它又报错了,所以还是决定放弃掉。
另一个是RemoteDriver,再找一台Windows机器起一个Selenium Server, 下载一个selenium-server-standalone-2.xx.x.jar, 然后用java -jar selenium-server-standalone-2.xxx.x.jar运行起来,可以加-Dport=3333重新设置端口,默认是4444。 然后就可以参考WebDriverFactory里的方法,连接到http://hostname:4444/wd/hub,再指定希望的浏览器来执行。
基于driverName字符串创建WebDriver的类,方便在配置文件和-D系统变量里随时切换测试浏览器。 既支持firefox,ie和chrome也支持Remotedriver的定义。
来自: yzqwqp > 《Selenium》
0条评论
发表
请遵守用户 评论公约
无头浏览器
无头浏览器Awesomium 基于Chromium无图形界面浏览器引擎。JavaScript PhantomJS Phantom JS是一个服务器端的 JavaScript API 的 WebKit JavaScript, Python, Ruby, Java, C#, Haskell, Objective-C, Pe...
Cordova插件中JavaScript代码与Java的交互细节介绍
Cordova插件中JavaScript代码与Java的交互细节介绍。比如您是用Cordova在Android平台上打包生成APK文件,那么您的Mobile代码(JavaScript)里还是不会直接调用您用Java实现的Custom Plugin,而是调用Cu...
Java 8 新特性
Java 8 新特性 Java 8 (又称为 jdk 1.8) 是 Java 语言开发的一个主要版本。$ java -versionjava version "1.8.0_31"Java(TM) SE Runtime Environment (build 1.8.0_31-b13)Java HotSpot(TM) ...
【小家java】java8新特性(简述十大新特性)
【小家java】java8新特性(简述十大新特性) 饱受赞誉相关阅读。Java 8可谓是自Java 5以来最具革命性的版本了,她在语言、编译器、类库、开发工具以及Java虚拟机等方面都带来了不少新特性。Lambda表达...
Selenium Webdriver 3.X源码分析之remote_connection.py
X源码分析之remote_connection.py.下面我们对该类进行详细的分析说明,模块路径为selenium >webdriver >remote >remote_connne...
使用python/casperjs编写终极爬虫-Google Keyword Tool Scraper(selenium+python version)
使用python/casperjs编写终极爬虫-Google Keyword Tool Scraper(selenium+python version)1.缘起。纵观Google目前的产品线,社交的Googl...
Selenium框架简介
Selenium框架简介。本文来自于csdn,介绍了Selenium IDE,Selenium RC,Selenium WebDriver,Selenium Grid,辅助工具等。Selenium框架...
专题:跨平台移动web中间件PhoneGap开发入门
专题:跨平台移动web中间件PhoneGap开发入门深度探索:走出PhoneGap的几个误区 本篇文章选自Adobe的官方博客,该文章旨在让大家走出在理解PhoneGap的目标中的几个误区。跨平台开发:初探PhoneGap移动开...
Web UI 自动化测试技术选型
selenium 的 API 封装遵循 W3C 提供的 webdriver 标准,因此 selenium 对各大主流浏览器的支持都不错,如果测试场景对浏览器兼容性有较高的要求,需要在多种浏览器中执行测试用例,selenium 仍是首选。...
微信扫码,在手机上查看选中内容