首页 > 上网技巧 > 电脑小技巧 > 正文

用selenium2\htmldriver模拟第三方登录新浪微博QQ等

时间:2013-03-26 11:11 作者:QQ地带 我要评论

进行播放记录等后台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。等有时间再查一下其中内在的原因吧。

标签:selenium2
顶一下
(2)
100%
踩一下
(0)
0%

Google提供的广告