Selenium2学习-018-WebUI自动化实战实例-016-自动化脚本编写过程中的登录验证码问题
日常的 Web 网站开发的过程中,为提升登录安全或防止用户通过脚本进行黄牛操作(宇宙最贵铁皮天朝魔都的机动车牌照竞拍中),很多网站在登录的时候,添加了验证码验证,而且验证码的实现越来越复杂,对其进行脚本识别的难度也越来越高。这对我们自动化脚本编写带了非常的不便,那么如何解决登录时的验证码问题呢?经常有初学自动化脚本编写的小主们问及此问题。
此文主要针对如何解决自动化测试脚本中含登录态的操作问题,即如何降低验证码对自动化脚本编写过程中的解决方法进行分析和解决,并以实例演示(基于易迅网易迅账号登录)。解决验证码的问题,一般有以下几种方法:
1、验证码识别技术(OCR)。通过验证码识别技术,识别登录过程中出现的验证码。此种方法不建议使用,浪费大量的人力物力,得不偿失。
2、万能验证码。例如:规定接收到的 ”aaron“ 为万能验证码,若服务器接收到了此验证码,则返回正确登录信息。此方法的缺陷是无法在线上使用,因为无法保证万能验证码的安全性。因而此方法一般应用于测试环境。
3、Cookie 越界登录。通过将用户登录的 cookie 信息添加至浏览器,直接越过登录操作(间接的跳过验证码输入),将用户的登录态添加到浏览器,即可进行相应的登录态用户操作。虽然此种方法有一定的局限性(受 cookie 的有效时间限制),俺还是比较推崇此种方法。
上述第一种方法,非常简单,在此就不再赘述了;第二种方法,有兴趣的小主大牛们可以尝试一下。下面主要以第三种方法为实例演示,基于易迅网易迅账号登录的 cookie 添加。
闲话少述,小二上码。。。敬请各位小主参阅,希望能对您在日常的 WebUI 自动化脚本编写有一定的启发和帮助。若有不足或错误之处,敬请大神指正,不胜感激!
/**
* Aaron.ffp Inc.
* Copyright (c) 2004-2015 All Rights Reserved.
*/
package main.aaron.demo.cookie; import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.util.Date; import main.aaron.sele.core.TestCase; import org.openqa.selenium.Cookie;
import org.testng.Assert;
import org.testng.annotations.AfterClass;
import org.testng.annotations.Test; /**
* Add cookie to web browser
*
* @author Aaron.ffp
* @version V1.0.0: autoSeleniumDemo main.aaron.demo.cookie UseCookieLogin.java, 2015-6-19 15:53:53 Exp $
*/
public class UseCookieLogin extends TestCase{
private final String f_cookie = this.PROJECTHOME + this.FILESEPARATOR + "cookie" + this.FILESEPARATOR + "browser.data";
private String baseUrl = "http://www.yixun.com/"; @Test
public void useCookieLogin(){
this.webdriver.get(this.baseUrl); try {
// clean the invalid cookie
this.webdriver.manage().deleteAllCookies(); // create file object
File f = new File(this.f_cookie); // read file
FileReader fr = new FileReader(f);
BufferedReader br = new BufferedReader(fr); // store row cookie info
String line; // add cookie to web browser
while ((line = br.readLine()) != null) {
String[] item = line.split(";"); if (item.length != 6) {
continue;
} for (int i = 0; i < item.length; i++) {
String name = item[0];
String value = item[1];
String domain = item[2];
String path = item[3];
Date expiry = null;
boolean isSecure = new Boolean(item[5]); // create cookie object
Cookie cookie = new Cookie(name, value, domain, path, expiry, isSecure); // add cookie to web browser
this.webdriver.manage().addCookie(cookie);
}
} br.close();
} catch (Exception e) {
e.printStackTrace();
Assert.fail((e.getMessage() == null)? "":e.getMessage());
} this.webdriver.get(this.baseUrl);
} @AfterClass
public void afterClass(){
this.webdriver.close();
this.webdriver.quit();
}
}
易迅网易迅账号 cookie 添加实战实例演示源代码
关于如何获取登录的 cookie 信息数据并保存,请参阅 Selenium2学习-017-WebUI自动化实战实例-015-获取浏览器中的 cookie 信息
PS:小主们在应用以上源码时,需要将源码中的 cookie 文件位置修改为本地合法路径才可:private final String f_cookie = this.PROJECTHOME + this.FILESEPARATOR + "cookie" + this.FILESEPARATOR + "browser.data";
至此,WebUI 自动化功能测试脚本第 016-自动化脚本编写过程中的登录验证码问题 顺利完结,希望此文能够给初学 Selenium 的您一份参考。
最后,非常感谢亲的驻足,希望此文能对亲有所帮助。热烈欢迎亲一起探讨,共同进步。非常感谢! ^_^
Selenium2学习-018-WebUI自动化实战实例-016-自动化脚本编写过程中的登录验证码问题的更多相关文章
- Selenium2学习-016-WebUI自动化实战实例-014-Selenium 窗口选择
在日常的 WebUI 自动化测试脚本编写过程中,经常需要打开新的页面,或者在多个打开的页面之间进行切换,以对页面元素进行相应的操作,以模拟用户的行为,实现 UI 的自动化测试.在过往的时间中,经常有初 ...
- Selenium2学习-014-WebUI自动化实战实例-012-Selenium 操作下拉列表实例-div+{js|jquery}
之前已经讲过了 Selenium 操作 Select 实现的下拉列表:Selenium2学习-010-WebUI自动化实战实例-008-Selenium 操作下拉列表实例-Select,但是在实际的日 ...
- Selenium2学习-010-WebUI自动化实战实例-008-Selenium 操作下拉列表实例-Select
此文主要讲述用 Java 编写 Selenium 自动化测试脚本编写过程中,对下拉列表框 Select 的操作. 下拉列表是 Web UI 自动化测试过程中使用率非常高的,通常有两种形式的下拉列表,一 ...
- Selenium2学习-009-WebUI自动化实战实例-007-Selenium 8种元素定位实战实例源代码(百度首页搜索录入框及登录链接)
此 文主要讲述用 Java 编写 Selenium 自动化测试脚本编写过程中,通过 ID.name.xpath.cssSelector.linkText.className.partialLinkTe ...
- Selenium2学习-008-WebUI自动化实战实例-006-易迅登录之 frame 处理
此文主要讲述用 Java 编写 Selenium 自动化测试脚本编写过程中,在因 frame 标签导致页面定位失败,提示 NoSuchElementException 时的,页面元素定位前的 fram ...
- Selenium2学习-032-WebUI自动化实战实例-030-JavaScript 在 Selenium 自动化中的应用实例之五(高亮标示元素)
在自动化脚本编写过程中,操作元素之前,需要对元素进行高亮显示(通过修改元素的边框样式),同时进行截图,以记录操作的元素对象.在实际应用中较为少见,通常用于演示,或者发生错误时的屏幕截图捕捉,用于错误报 ...
- Selenium2学习-028-WebUI自动化实战实例-026-获取页面元素值或者元素属性值
在自动化脚本编写过程中,经常需要获取页面元素的文本进行判断,以便对于不同的文本进行不同的处理.比如:很多的购物网站,加入购物车的按钮是有多个状态的(加入购物车.到货通知.暂不销售等),那么在实际的操作 ...
- Selenium2学习-039-WebUI自动化实战实例-文件上传下载
通常在 WebUI 自动化测试过程中必然会涉及到文件上传的自动化测试需求,而开发在进行相应的技术实现是不同的,粗略可划分为两类:input标签类(类型为file)和非input标签类(例如:div.a ...
- Selenium2学习-004-WebUI自动化实战实例-002-百度登录
此文主要通过 百度登录 功能,进行 Selenium2 的实战实例讲解.文中所附源代码于 2015-01-17 23:33 亲测通过,敬请亲们阅览.同时,您也可参考此文进行其他网站(例如 京东.易迅. ...
随机推荐
- TYVJ P1048 田忌赛马 Label:dp
描述 中国古代的历史故事“田忌赛马”是为大家所熟知的.话说齐王和田忌又要赛马了,他们各派出N匹马,每场比赛,输的一方将要给赢的一方200两黄金,如果是平局的话,双方都不必拿出钱.现在每匹马的速 ...
- 手机开发必备技巧:javascript及CSS功能代码分享
1. viewport: 也就是可视区域.对于桌面浏览器,我们都很清楚viewport是什么,就是出去了所有工具栏.状态栏.滚动条等等之后用于看网页的区域,这是真正有效的区域.由于移动设备屏幕宽度不同 ...
- BZOJ4260: Codechef REBXOR
Description Input 输入数据的第一行包含一个整数N,表示数组中的元素个数. 第二行包含N个整数A1,A2,…,AN. Output 输出一行包含给定表达式可能的最大值. S ...
- ejabberd 的框架
最近看源码,总结ejabberd的大致框架如下
- [转] - QPixmap全局变量载入多张图片失效问题
我想qt 中QPixmap这个类大家都很熟悉,它可以很简单的在标签上贴图:例如: QPixmap p; p.load("1.png"): label->setPixmap(p ...
- LeetCode | Unique Paths【摘】
A robot is located at the top-left corner of a m x n grid (marked ‘Start’ in the diagram below). The ...
- poj2387 初涉最短路
前两天自学了一点点最短路..看起来很简单的样子... 就去kuangbin的专题找了最简单的一道题练手..然后被自己萌萌的三重for循环超时虐的不要不要的~ 松弛虽然会但是用的十分之不熟练... 代码 ...
- service mongod start start: Unknown job: mongod问题
终于解决了这个异常蛋疼的问题,当安装完毕mongodb的时候,执行: root@ubuntu:/usr/local# service mongod start 出现: start: Unknown j ...
- 【IOS笔记】Event Delivery: The Responder Chain
Event Delivery: The Responder Chain 事件分发--响应链 When you design your app, it’s likely that you want t ...
- mysql入门问题
1.给列设置默认时间 在创建表的图形化界面,不能直接用函数sysdate()或者now()来设置默认当前时间,要用sql脚本创建的话就可以 IF NOT EXISTS `tb_1` THENBEGIN ...