栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

selenium自动化

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

selenium自动化

第一章 自动化测试简介、selenium 环境搭 建

1.1 自动化测试简介 B/S Web 自动化:selenium 手机:移动段自动化,appnium 接口自动化:工具:postman、Jmeter 代码:httpclient 性能测试

自动化测试流程: 可行性分析-->测试需求分析--> 制定测试计划 -->自动化测试设计--> 测试脚本开-->无人职 守测试 -->提交测试报告--> 脚本维护阶段

1.4 自动化测试及工具简述

QTP:是 quicktest Professional 的简称,是一款商业化的自动化测试工具。提供了强大 易用的录制回放功能。支撑 B/S、C/S 两种架构的软件测试。

Robot framework :是一款 python 编写的功能自动化测试框架。具备良好的可扩展性, 支持关键字驱动,可以同时测试多种类型的客户端或者接口,可以进行分布式测试执行。

Selenium : 是一款用于 Web 应用程序测试的工具,它支持多平台、多语言、多浏览去实 现自动化测试。

1.5 Selenium 工具介绍

Selenium 是 ThoughtWorks 专门为 Web 应用而开发的自动化测试工具,适合进行 功能测试、验收测试,同时支持所有基于 web 的管理任务自动化。

主要功能包括:测试与浏览器的兼容性,测试你的应用程序看是否能够很好得工 作在不同浏览器和操作系统之上。测试系统功能,创建回归测试检验软件功能和用户需求。 Selenium 特点:

 开源、免费

 多浏览器支持:Firefox、Chrome、IE、Opera

 多平台支撑:windows、linux、MAC

 对 web 页面有良好的支撑

 简单(API 简单)、灵活(用开发语言驱动)

 支持分布式执行测试用例 自动化测试的目的:冒烟测试、业务回归测试、web 浏览器的兼容性测试

1.6 Selenium 工具组成

Selenium IDE 是嵌入到 Firefox 浏览器中的一个插件,实现简单的浏览器录制与回 放功能。

实际场景中如何使用?

快速的创建 BUG 重现脚本,在测试人员的测试过程中,发现了 BUG 之后可以通 过 IDE 将重现的步骤记录下来,以帮助开发人员更容易的重现 BUG。

IDE 录制的脚本可以转换成多种语言,从而帮助我们快速的开发脚本。

Selenium Gird 是一种自动化测试的辅助工具,Gird 通过现有的计算机基础设施,能 加快 web_app 的功能测试,利用 Gird,可以很方便的同时在多台机器上和异构环境中并行 运行多个测试用例。其主要特点:

 并行执行

 通过一个主机统一控制用例在不同环境、不同浏览器下运行

 灵活添加变动测试机 

Selenium RC 是 Selenium 家族的核心工具,Selenium RC 支持多种不同的语言编写 自动化测试脚本,通过 Selenium RC 的服务器为代理服务器去访问应用从而达到测试的目的。

Selenium RC 使用分 Client Libraries 和 Selenium Server,Client Libraries 库主要用于编 写测试脚本,用来控制 Selenium Server 的库。

Selenium Server 负责控制浏览器的行为,它主要包含 3 部分:Launcher、Http Proxy、 Core。其中 Core 是被 Selenium Server 嵌入到浏览器页面中,它本质是 JS 函数的集合,通过 对这些 JS 函数进行操作,实现用程序对浏览器进行操作。Launcher 用于启动浏览器,把 Core 加载到浏览器页面中,并把浏览器代理设置成为 Selenium Server 的 Http Prox

WebDriver 通过原生浏览器支持或者浏览器扩展直接控制浏览器。WebDriver 针对 各个浏览器而开发,取代了嵌入到被测 web 应用中的 javascript,与浏览器紧密集成。同时 WebDriver 还利用操作系统级的调用模拟用户输入

WebDriver 原理

练习:

1. 安装 Maven 并配置好

2. 通过 Maven 拉最新的 selenium 包 3.8.1

3. 安装最新的 Google 浏览器,查自己的 Google 版本,查对应的驱动版本,下载 对应的驱动放 jdk 安装目录的 bin 目录下,或者在 google 浏览器安装目录下也放 一个

4. 新建一个包 com.newdream.class1--> 新建一个类 baiduDemo 类

5. 把演示的代码敲好,能跑自动化脚本就 OK 了,5 分到手 

第二章 浏览器操作及对象定位

2.1 selenium 安装浏览器驱动

Webdriver 支 持 FireFox(FireFoxDriver) 、 IE(InternetExplorerDriver) 、 Chrome(ChromeDriver)、Opera(OperaDriver),它还支持 AndriodDriver 和 Iphone(IphoneDriver) 的移动应用测试。

1、FireFox

WebDriver 实现了 FireFoxDriver,无需用户下载 FireFoxDriver。

优点:FireFoxDriver 对页面的自动化测试支持得比较好,很直观地模拟页面的操作,对 Javascript 的支持也非常完善,基本上页面上做的所有操作 FireFox Driver 都可以模拟。

缺点:启动很慢,运行也比较慢,不过,启动之后 Webdriver 的操作速度虽然不快但还是可 以接受的,建议不要频繁启动停止 FireFoxDriver。

使用 Firefox 浏览器只需要设置 WebDriver driver = new FirefoxDriver(),前提是你的 Firefox 被 安装在默认的位置。

2、chrome

webdriver 没 有 实 现 chromedriver , 要 使 用 chrome 浏 览 器 需 要 自 己 下 载 chromedriver.exe,这个程序是由Chrome团队提供的,可以看做它是链接WebDriver和 Chrome 浏览器的桥梁。

建议把 driver 放在浏览器的安装路径,也可以放在 java 安装路径下的 bin 目录,就不需要设 置系统属性值

使用方法:

先把 chromedriver.exe 放置在 chrome 的安装路径,代码如下:

System.setProperty("webdriver.chrome.driver", "C:\Program Files (x86)\Google\Chrome\Application\chromedriver.exe"); WebDriver driver = new ChromeDriver();

2.2 selenium 浏览器基本 API(Java 篇)

1.浏览器中加载 URL: get() --首先要启动浏览器

实例:driver.get("http://www.baidu.com")

2.浏览器最大化:window().maximize() 实例:driver.manage().window().maximize();

3.刷新:refresh() 实例:driver.navigate().refresh();

4.返回上一页:back() 实例:driver.navigate().back();

5. 向前进一页:forward() 实例:driver.navigate().forward();

6.截图:getScreenshotAs()

实例:

File screenShotFile = ((TakesScreenshot)driver).getScreenshotAs(OutputType.FILE); FileUtils.copyFile(screenShotFile, new File("D:/test.png"));

7.获取当前页的 URL:getCurrentUrl() 实例:driver.getCurrentUrl();

8.关闭当前 tab 页面:close() 实例:driver.close();

9.退出当前 driver:quit() 实例:driver.quit();

10.获取当前页的 title: getTitle() 实例:driver.getTitle();

2.3 selenium 对象定位 API(Java 篇)

识别工具:

1. Google Chrome 、IE 按 F12 开发者工具

2. Mozilla Firefox :firebug

1.通过 id 定位元素

findElement(By.id("id_vaule"))

2.通过 name 定位元素:

findElement(By.name("name_vaule"))

3.通过 class_name 定位元素:

findElement(By.className("class_name"))

4.通过 tag_name 定位元素:

findElement(By.tagName("tag_name")

5.通过 link 定位:

findElement(By.linkText("text_vaule")) 或:findElement(By.partiallinkText("text_vaule"))

6.通过 css 定位元素:

findElement(By.cssSelector())

7.通过 xpath 定位元素:

findElement(By.xpath())

xpath 识别方式

xpath 是一种在 XML 文档中定位元素的语言。因为 HTML 可以看作是 XML 的 一种形式,selenium 可使用这种强大语言在 web 应用中定位元素。xpath 有 6 种 定位元素的方式:

1、通过绝对路径做定位

XPath 的开头是一个斜线(/)代表这是绝对路径。

使用 firebug 等方式可以获取绝对路径

2、通过相对路径做定位

如果开头是两个斜线(//)表示文件中所有符合模式的元素都会被选出来,即使 是处于树中不同的层级也会被选出来。

举例:百度

div: /html/body/div[3]/div[1]/div/div[3]

a:/html/body/div[3]/div[1]/div/div[3]/a[2]

findElement(By.xpath("//div[3]/a"))

返回查找到的第一个符合条件的元素

3、通过元素索引定位 ,索引的初始值为 1

findElement(By.xpath("//div[3]/a[2]")

定位文件中第 2 个 a 对象

4、使用 xpath 属性定位

举例:新闻
findElement(By.xpath("//a[@name='tj_trnews']")) 
findElement(By.xpath("//a[@name='tj_trnews' and @class='mnav']")) 
findElement(By.xpath("//a[@name='tj_trnews' or @class='mnav']")) 

5、使用部分属性值匹配
starts-with() 匹配开始
findElement(By.xpath("//a[starts-with(@name,'tj_trnews')]")) 
匹配结束
findElement(By.xpath("//a[substring(@name,string-length(@name)-5)='trnews']")) 
contains():包含
findElement(By.xpath("//a[contains(@name,'trnews')]")) 
6、使用任意属性值匹配元素
findElement(By.xpath("/checkbox.html");
List inputs = driver.findElements(By.tagName("input"));
for (WebElement input:inputs){
if(input.getAttribute("type")=="checkbox")
input.click();
}
List els=driver.findElements(By.className("c-input"));
WebElement[] we = new WebElement[10];
els.toArray(we);
we[2].sendKeys("新梦想软件测试");

3.8 层级定位

在实际的项目测试中,经常会遇到无法直接定位到需要选取的元素,但是其父元素比较容易 定位,通过定位父元素再遍历其子元素选择需要的目标元素,或者需要定位某个元素下所有 的子元素。

层级定位的思想是先定位父对象,然后再从父对象中精确定位出其我们需要选取的后 代元素。

3.9 定位 frame 中的对象

3.10 浏览器多窗口处理

3.11 alert//confirm/i/prompt 处理

3.12 下拉框处理

3.13 select 菜单处理

3.14 调用 javascript

3.15 验证码处理

对于 web 应用,很多地方比如登录、发帖都需要输入验证码,类型也多种多样,解 决验证码的方法如下:

去掉验证码:在测试环境去掉,对于开发来说屏蔽相关验证码代码

设置万能码:只要用户输入这个万能码,程序就认为验证通过

验证码识别技术:可以通过 OCR 引擎来识别图片验证码,不过不能达到 100%识别

记录 cookie:通过向浏览器添加 cookie 可以绕过登录的验证码,在用户登录之前,通过 add_cookie()方法讲用户名和密码写入 cookie,使用该方法最大难点是如何或者用户名和密码 的 name,可以通过 get_cookies()或者询问开发解决此问题。

真实线上环境:把用户放白名单

3.16 webdriver 原理小结

第五章 testNG

5.1 testNG 简介

1、testNG 介绍

TestNG 是一个设计用来简化广泛的测试需求的测试框架,从单元测试(隔离测试一个类) 到集成测试(测试由有多个类多个包甚至多个外部框架组成的整个系统,例如运用服务器)。

 testNG 灵感来自 Junit 和 Nunit 的,但引入了一些新的功能,使其功能更强大,使用 更方便;

 testNG 是一个开源自动化测试框架,NG 表示下一代;

 testNG 可以把测试类进行集成;

 testNG 的创造者是 Cedric Beust(塞德里克 . 博伊斯特)

 testNG 消除了大部分的旧框架的限制,使开发人员能够编写更加灵活和强大的测试。

因为它很大程度上借签了 Java 注解(JDK1.5 引入的)来定义的测试,它也可以告诉 你如何使用这个新功能在真实的 Java 语言生产环境中。

2、testNG 特点

 注解

 TestNG 使用 Java 和面向对象的功能

 支持综合类测试(例如,默认情况下,没有必要创建一个新的测试每个测试方法的 类的实例)

 独立的编译时间测试代码运行时配置/数据信息

 灵活的运行时配置

 主要介绍“测试组”。当编译测试,只要问 TestNG 运行所有的“前端”的测试,或 “快”,“慢”,“数据库”等

 支持依赖测试方法,并行测试,负载测试,局部故障

 灵活的插件 API

 支持多线程测试

 漂亮的测试报告

testNG 环境配置

① TestNG 是一个 Java 的框架,所以第一个要求是 JDK 要安装在你的机器上。JDK 必须 是 1.5 以上的版本(支持注解),JDK 安装不再详述。

② 下载并安装 Eclipse。

③ 启动 Eclipse,点击“help”菜单,点击“install New Software”,点击“add”按钮 “Name”框中输入 testNG "Location"框中输入 http://beust.com/eclipse 点击“OK”按钮。

④ 在“install”框体中,勾选 TestNG 的选项,点击“Next”按钮。

⑤ 弹出协议内容窗口,选择接受协议,然后点击“Finish”按钮。

⑥ 开始安装 testNG 插件,安装好后会提示重启 Eclipse,重启 Eclipse 后安装成功。

⑦ 选择一个 java 项目,右击,出现如下图所示界面即可。

testNG 测试程序编写步骤

testNG 编写步骤如下:

① 测试和编写业务逻辑,在代码中插入 TestNG 的注解;

② 添加一个 testng.xml 文件或 build.xml 中在测试信息(例如类名,您想要运行的组, 等..);

③ 运行 TestNG. 举例如下:

现有一个计算器类,代码如下:

public class calc {
int add(int a,int b){
return a+b;
}
int minus(int a,int b){
return a-b;
}
}

测试类编写如下:

import org.testng.annotations.Test;
import static org.testng.Assert.assertEquals;
public class demo {
calc ca =new calc();
@Test
public void testAdd() {
assertEquals(ca.add(3, 5),8);
}
@Test
public void testminus(){
assertEquals(ca.minus(5, 5),2);
}
}

代码解析: 导入 teseNG 类; import static 称为静态导入,意思是导入这个类里的静态方法。导入后在这个类中,可以直 接用方法名调用静态方法,而不必用 ClassName.方法名 的方式来调用; @test Java 注解,该注解下面表示一个测试方法 assertEquals 断言判断是否相等

TestNG 练习作业: 1. 新建一个 TestNG 测试类,打开百度放 @BeforeMethod, 搜索业务放@Test ,关闭放 @AfterMethod,然后执行,查看结果 2. 加二个搜索业务放@Test,搜索内容不一样,并执行;注意执行的顺序和执行了那些注解 3. 把@BeforeMethod 改成@BeforeClass , @AfterMethod 改成@AfterClass,并执行,注意执 行了几次 4. 加 baiduCase1.xml,注意配置需要执行的测试类,使用 xml 运行 5. 把网站的地址 url 分离出来,放 xml 配置文件,如果我们有多个测试类,需要换测试环境, 只需要改一次 xml 里面的参数 url 地址。 分离配置数据 6. 把@Test 里面三次搜索内容参数化,数据放 xml,再回去改测试类,执行 7. 把@Test 里面三次搜索内容参数化,只需要留下一个@Test,把输入的数据做成参数,把 预期结果也做成一个参数,数据放@DataProvider ,分离测试数据

模块化编码: 1. 写一个普通类,封装 3 个百度业务 2. 写一个 TestNG 的测试类,写测试用例 3. 配置 TestNG.xml 文件 4. 测试数据分离

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/688997.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号