进行播放记录等后台api的自动化测试时,需要后台鉴权,本站注册用户这块容易解决:通过httpclient向相应的passport接口提交请求,抓取cookie;第三方登录由于涉及到第三方的接口和回调处理,逻辑较为复杂,用之前方法实现比较麻烦。权衡之后决定用selenium实现。

  selenium的实现过程比较顺利,不过遇到两个小情况:1.iframe上元素的查找、捕获,实现方式driver.switchTo.frame(iframeId);2.在主页面上click链接打开新页面,新页面与主页面切换后才能对新页面进行操作,实现方式:

1 WebDriver popup = null;
2 for (String winHandle : driver.getWindowHandles()) {
3     popup = driver.switchTo().window(winHandle);
4     if (popup.getTitle().contains("QQ帐号安全登录"))
5         break;
6 }    

 

  不过selenium运行起来,由于调取的是firefox\ie\chrome等浏览器,浏览器启动,浏览器下载页面上所有css\js\picture等文件,解析css渲染效果、解析js,所以速度就会很慢,对于只是抓起cookie的需求,实现效率实在不是很理想。好在selenium的webdriver除了调取浏览器之外,还可以使用htmlunitdriver,该driver是对htmlunit的再次封装,使其对外接口与selenium使用浏览器做webdriver时的对外接口相一致,由于不需要启动额外程序,也没有了界面渲染,省去了不少执行时间。

  不过在实现时,遇到一个htmlunitdriver的疑似bug:在主页面上click链接打开新页面时,只是进行了该链接相应的http请求,并未将该页面上其它js\css进行下载,这样在对新页面中元素进行操作,触发的js函数又恰恰在这些未下载的文件中时,就会出问题了,例如此次遇到的向一个type="password"的input中sendkeys不成功,无法实现相关操作。解决办法,抓起要打开的链接中的href属性,在driver中直接get打开,虽然未能彻底找到并解决该bug,但也成功绕开了该bug。等有时间再查一下其中内在的原因吧。

 

posted on 2012-11-28 10:47  redspark  阅读(1321)  评论(0编辑  收藏  举报