Selenium2学习-018-WebUI自动化实战实例-016-自动化脚本编写过程中的登录验证码问题

日常的 Web 网站开发的过程中,为提升登录安全或防止用户通过脚本进行黄牛操作(宇宙最贵铁皮天朝魔都的机动车牌照竞拍中),很多网站在登录的时候,添加了验证码验证,而且验证码的实现越来越复杂,对其进行脚本识别的难度也越来越高。这对我们自动化脚本编写带了非常的不便,那么如何解决登录时的验证码问题呢?经常有初学自动化脚本编写的小主们问及此问题。

此文主要针对如何解决自动化测试脚本中含登录态的操作问题,即如何降低验证码对自动化脚本编写过程中的解决方法进行分析和解决,并以实例演示(基于易迅网易迅账号登录)。解决验证码的问题,一般有以下几种方法:

1、验证码识别技术(OCR)。通过验证码识别技术,识别登录过程中出现的验证码。此种方法不建议使用,浪费大量的人力物力,得不偿失。

2、万能验证码。例如:规定接收到的 ”aaron“ 为万能验证码,若服务器接收到了此验证码,则返回正确登录信息。此方法的缺陷是无法在线上使用,因为无法保证万能验证码的安全性。因而此方法一般应用于测试环境。

3、Cookie 越界登录。通过将用户登录的 cookie 信息添加至浏览器,直接越过登录操作(间接的跳过验证码输入),将用户的登录态添加到浏览器,即可进行相应的登录态用户操作。虽然此种方法有一定的局限性(受 cookie 的有效时间限制),俺还是比较推崇此种方法。

上述第一种方法,非常简单,在此就不再赘述了;第二种方法,有兴趣的小主大牛们可以尝试一下。下面主要以第三种方法为实例演示,基于易迅网易迅账号登录的 cookie 添加。

闲话少述,小二上码。。。敬请各位小主参阅,希望能对您在日常的 WebUI 自动化脚本编写有一定的启发和帮助。若有不足或错误之处,敬请大神指正,不胜感激!

 1 /**
 2  * Aaron.ffp Inc.
 3  * Copyright (c) 2004-2015 All Rights Reserved.
 4  */
 5 package main.aaron.demo.cookie;
 6
 7 import java.io.BufferedReader;
 8 import java.io.File;
 9 import java.io.FileReader;
10 import java.util.Date;
11
12 import main.aaron.sele.core.TestCase;
13
14 import org.openqa.selenium.Cookie;
15 import org.testng.Assert;
16 import org.testng.annotations.AfterClass;
17 import org.testng.annotations.Test;
18
19 /**
20  * Add cookie to web browser
21  *
22  * @author Aaron.ffp
23  * @version V1.0.0: autoSeleniumDemo main.aaron.demo.cookie UseCookieLogin.java, 2015-6-19 15:53:53 Exp $
24  */
25 public class UseCookieLogin extends TestCase{
26     private final String f_cookie = this.PROJECTHOME + this.FILESEPARATOR + "cookie" + this.FILESEPARATOR + "browser.data";
27     private String baseUrl = "http://www.yixun.com/";
28
29     @Test
30     public void useCookieLogin(){
31         this.webdriver.get(this.baseUrl);
32
33         try {
34             // clean the invalid cookie
35             this.webdriver.manage().deleteAllCookies();
36
37             // create file object
38             File f = new File(this.f_cookie);
39
40             // read file
41             FileReader fr = new FileReader(f);
42             BufferedReader br = new BufferedReader(fr);
43
44             // store row cookie info
45             String line;
46
47             // add cookie to web browser
48             while ((line = br.readLine()) != null) {
49                 String[] item = line.split(";");
50
51                 if (item.length != 6) {
52                     continue;
53                 }
54
55                 for (int i = 0; i < item.length; i++) {
56                     String name = item[0];
57                     String value = item[1];
58                     String domain = item[2];
59                     String path = item[3];
60                     Date expiry = null;
61                     boolean isSecure = new Boolean(item[5]);
62
63                     // create cookie object
64                     Cookie cookie = new Cookie(name, value, domain, path, expiry, isSecure);
65
66                     // add cookie to web browser
67                     this.webdriver.manage().addCookie(cookie);
68                 }
69             }
70
71             br.close();
72         } catch (Exception e) {
73             e.printStackTrace();
74             Assert.fail((e.getMessage() == null)? "":e.getMessage());
75         }
76
77         this.webdriver.get(this.baseUrl);
78     }
79
80     @AfterClass
81     public void afterClass(){
82         this.webdriver.close();
83         this.webdriver.quit();
84     }
85 }

易迅网易迅账号 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 的您一份参考。

最后,非常感谢亲的驻足,希望此文能对亲有所帮助。热烈欢迎亲一起探讨,共同进步。非常感谢! ^_^

时间: 2024-08-07 08:35:05

Selenium2学习-018-WebUI自动化实战实例-016-自动化脚本编写过程中的登录验证码问题的相关文章

Selenium2学习-016-WebUI自动化实战实例-014-Selenium 窗口选择

在日常的 WebUI 自动化测试脚本编写过程中,经常需要打开新的页面,或者在多个打开的页面之间进行切换,以对页面元素进行相应的操作,以模拟用户的行为,实现 UI 的自动化测试.在过往的时间中,经常有初学 Selenium(webdriver) 的朋友问及如何选择窗口的问题,其实 Selenium 已经给我们提供的了相应的方法去解决这个问题.解决思路如下: 1.通过 webdriver.getWindowHandles() 获取所有已打开窗口的信息 Set<String> 2.遍历上述信息,并切

Selenium2学习-014-WebUI自动化实战实例-012-Selenium 操作下拉列表实例-div+{js|jquery}

之前已经讲过了 Selenium 操作 Select 实现的下拉列表:Selenium2学习-010-WebUI自动化实战实例-008-Selenium 操作下拉列表实例-Select,但是在实际的日常网页开发中,实现下拉列表的方法.样式.特效有 N 多种,但是无论实现的方法有多少不同,其都会遵循一定的规律,在此我就不再赘述了(有兴趣的小主,可以找有经验的前段请教一下).同时,此类实现的下拉列表在使用 Selenium 进行定位时,往往不尽如人意,定位比较繁琐. 此文仅以 淘宝网账户注册时选择手

Selenium2学习-009-WebUI自动化实战实例-007-Selenium 8种元素定位实战实例源代码(百度首页搜索录入框及登录链接)

此 文主要讲述用 Java 编写 Selenium 自动化测试脚本编写过程中,通过 ID.name.xpath.cssSelector.linkText.className.partialLinkText.tagName 的实战实例源代码演示 Selenium 元素定位的 8 种方法,源代码测试通过日期为:2015-01-26 00:18,请知悉.注意:其中通过 tagName 定位元素时,返回的是一个 WebElement 的数组,需要根据实际的测试需求对其进行进一步的处理. 希望能对初学 S

Selenium2学习-008-WebUI自动化实战实例-006-易迅登录之 frame 处理

此文主要讲述用 Java 编写 Selenium 自动化测试脚本编写过程中,在因 frame 标签导致页面定位失败,提示 NoSuchElementException 时的,页面元素定位前的 frame 处理,即 WebDriver.swtichTo.frame() 的概要用法. 希望能对初学 Selenium2 WebUI 自动化测试编程的亲们有所帮助.若有不足之处,敬请大神指正,不胜感激! 在我之前的页面元素定位示例文章 (Selenium2 Web 元素定位及 XPath 编写演示示例)中

Selenium2学习-010-WebUI自动化实战实例-008-Selenium 操作下拉列表实例-Select

此文主要讲述用 Java 编写 Selenium 自动化测试脚本编写过程中,对下拉列表框 Select 的操作. 下拉列表是 Web UI 自动化测试过程中使用率非常高的,通常有两种形式的下拉列表,一种是 Select 的下拉列表,此种操作的时候比较简单,定位到元素后直接操作即可:还有的下拉列表是以多个 div + js + input 的形式实现,input 用于存储选择的项的 value 值:当然也会有其他方式实现的下拉列表. 希望能对初学 Selenium2 WebUI 自动化测试编程的亲

Selenium2学习-032-WebUI自动化实战实例-030-JavaScript 在 Selenium 自动化中的应用实例之五(高亮标示元素)

在自动化脚本编写过程中,操作元素之前,需要对元素进行高亮显示(通过修改元素的边框样式),同时进行截图,以记录操作的元素对象.在实际应用中较为少见,通常用于演示,或者发生错误时的屏幕截图捕捉,用于错误报告分析. 直接上码了...... 1 /** 2 * 3 * @function height light the element 4 * 5 * @author Aaron.ffp 6 * @version V1.0.0: autoUISelenium main.java.aaron.sele.c

Selenium2学习-028-WebUI自动化实战实例-026-获取页面元素值或者元素属性值

在自动化脚本编写过程中,经常需要获取页面元素的文本进行判断,以便对于不同的文本进行不同的处理.比如:很多的购物网站,加入购物车的按钮是有多个状态的(加入购物车.到货通知.暂不销售等),那么在实际的操作过程中,需要对此按钮对应的不同的值,执行相应的逻辑. 代码相对比较简单,在此不再详细说明了,直接上码,敬请各位小主参阅,若有不足之处,敬请大神指正,非常感谢! 获取元素值的源码如下所示: 1 /** 2 * @function Get text of element. It will be retu

Selenium2学习-004-WebUI自动化实战实例-002-百度登录

此文主要通过 百度登录 功能,进行 Selenium2 的实战实例讲解.文中所附源代码于 2015-01-17 23:33 亲测通过,敬请亲们阅览.同时,您也可参考此文进行其他网站(例如 京东.易迅.天猫等)的登录(一般登录流程基本相同,若需填写验证码,因目前验证码识别不方便,初始学习时可让脚本运行到添加验证码时人工输入.在单位进行此部分的自动化脚本编写时,最好取得开发的支持使用万能验证码,方便脚本编写),进行编写登录自动化测试脚本,若您直接使用此文所附的源代码运行测试,则需要将文中 账户名和密

Selenium2学习-039-WebUI自动化实战实例-文件上传下载

通常在 WebUI 自动化测试过程中必然会涉及到文件上传的自动化测试需求,而开发在进行相应的技术实现是不同的,粗略可划分为两类:input标签类(类型为file)和非input标签类(例如:div.a或其他方式结合实现). 非input标签类因其有各式各样的实现方式,需要考虑具体的场景,因而此文对此类文件上传不做讲解,以input标签实现文件上传的方式进行讲解,请知悉! 解决方案有如下三种: 1.定位元素直接通过sendkeys修改input标签的文件链接: 2.通过第三方控件(AutoIt)编