日期:2014-05-17  浏览次数:20575 次

用selenium2\htmldriver模仿第三方登录(新浪微博、qq等),取cookie

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

?