基于Selenium工具对Web应用进行功能测试

软件测试 专栏收录该内容
8 篇文章 0 订阅

                                                               基于Selenium工具对Web应用进行功能测试

一、背景。

       最新一年(2019)的软件测试大赛即将拉开帷幕,今天与往年相比,增加了自主可控的分赛项,进一步的丰富了比赛的内容,各项评分依据也更加明确,因此能够根据分数更有针对性的找出自己的代码问题了,从而获得更好地分数,提高脚本编写能力。评测工具完善速度之快,超出个人想象,可以看得出来主办方费心了,预祝软件测试大赛发展的越来越好。(更好的阅读体验,请移步我的个人博客)

        自主可控赛项的比赛内容有三部分构成,分别为:功能测试、性能测试、众包测试,其中功能测试的内容就是利用Selenium测试工具对Web应用进行功能测试。之所以称作为自主可控,是因为待测试Web应用是部署在国产的应用服务器上面的,采用的国产CPU、操作系统等,具备完全自主知识产权,编写的脚本也必须启动国产浏览器(360浏览器、QQ浏览器)来测试Web应用才可以得分。

        有关Selenium的介绍与环境安装,在之前的一篇博客里面也写过,链接为 Selenium介绍及环境搭建,经过又一段时间的学习,对这个有了进一步的认识,加上此次比赛需要使用国产浏览器的环境,此前并不了解这方面的东西,因此打算在这里再次记录一下学习过程与心得体会。

        对软件测试感兴趣的,想参加的比赛的,官网地址在这里全国大学生软件测试大赛

二、Selenium介绍以及环境配置。

       2.1、Selenium介绍:

       我们知道,软件测试的目的在于在规定的条件下对程序进行操作,以发现程序错误,衡量软件质量,并对其是否能满足设计要求进行评估。由于在某些特定的场景下,例如:重复单一的数据录入或是击键等测试操作,使用手动测试会进行大量重复性的操作,浪费大量时间和人力,因此,这种情况下有必要引入自动化测试来对手动测试进行补充,从而提高测试效率。

      根据对测试模块规模的不同,敏捷大师Mike Cohn提出了测试金字塔的概念,从而为测试分层打下基础,以此来提高自动化测试的效率。测试金字塔如下图所示:

测试金字塔

      随着测试规模的不断增大,测试成本与测试难度也在不断增加。图中的三层,代表的含义如下:①Unit测试即单元测试,是对程序的函数方法进行测试,属于白盒测试的一种类型,通常由开发人员编写相关的测试脚本进行测试。在Java中我们常会用Junit框架进行测试。②Service服务测试即对相关的API接口进行测试,目的是为了测试服务提供的数据等输出结果是否能够正常获取,以此来验证相关业务逻辑代码是否书写正确,常见的工具有Postman等。③UI测试是对整个系统进行的完整模块的测试,主要来验证系统的界面元素是否符合规范、提供的功能是否满足预期,常见的测试工具有Selenium、Appium等。

       Selenium是进行UI测试的一种框架,主要是对Web应用进行功能测试,从2004年诞生至今,已经发展到3.0版本,是一个非常优秀的开源测试框架。Selenium的框架底层使用JavaScript模拟真实用户对浏览器进行操作,测试脚本执行时,浏览器根据脚本代码做出点击,输入,打开,验证等操作,从普通终端用户的角度测试应用程序,以期来发现程序的Bugs,促进程序功能的完善。如果需要进一步了解此框架,可以去github了解源码,或者官网了解他的近期发展情况。

      2.2 、环境配置:

      这里介绍的是Windows系统下使用Java语言进行测试脚本的编写,环境配置的整体流程为:1,下载JDK,配置好Java运行环境;2,下载Selenium的Java开发包,编写脚本需要依赖这个包;3,下载与浏览器版本对应的driver驱动,并添加到环境变量path下。由于是在mooctest平台做题目,因此还需要下载平台提供的最新eclipse评分插件(版本3.0.6)。

     1)JDK安装配置,在CMD命令行输入命令: java -version 检查是否安装配置成功。

检查环境变量是否配置成功

     2)下载eclipse,并从mooctest平台下载最新的eclipse插件,将插件安装到eclipse。安装之后,eclipse的工具栏应该出现了mooctest的按钮。也可以下载mooctest提供的含插件的Eclipse,但是需要更新插件至最新版本。

     3)Selenium 工具包下载配置。可以从官网或者mooctest下载比赛要求的selenium-standalone-server-3.9.1.jar工具包(此包的名称需要修改成项目依赖的包名selenium-standalone.jar),下载后,放置于 C盘 mooctest文件夹下面,如果是第一次使用这个平台,则需要自己新建一个mooctest文件夹,然后把包放进去。

     4) 下载浏览器驱动。自主可控赛项,举办方要求使用国产浏览器,在这里采用了360浏览器。由于360极速模式基于chromium开源项目,因此这里下载Chromedriver即可驱动360浏览器。查看浏览器版本对应的driver版本下载即可,然后配置好环境变量。

Chromedriver环境变量配置

     5)在系统环境变量中指定webdriver.chrome.bin的值为360浏览器的路径值,在启动浏览器的时候选择极速模式。

       到这里,环境就是配置完毕了,其中要特别注意Chromedriver的版本,浏览器路径的配置问题。完成后,打开Eclipse下载代码,测试运行,检验环境是否正确。

        使用mooctest插件的run and submit 提交代码,当eclipse控制台输出driver和浏览器的路径,浏览器能正常打开,说明环境配置正确,这时候就可以按照规则文档进行相关的测试了。

三、Selenium 使用方法。

        3.1、代码示例:

        在配置好环境之后,之后就可以使用selenium进行元素的查找与点击等操作从而对WEB应用进行全面的功能测试。一个简单的示例如下:

public class Example {
	public static void test(WebDriver driver) {
         try {
            //10S的元素查找时间
            driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);
            //请求打开一个网页
            driver.get("https://www.baidu.com");
           //查找元素,并向元素输入内容
            WebElement kwElement = driver.findElement(By.id("kw"));
			kwElement.clear();
			kwElement.sendKeys("安徽工业大学");
            driver.findElement(By.id("su")).click();
            driver.findElement(By.linkText("欢迎访问安徽工业大学门户网站!")).click();
         } catch (Exception e) {
		}

	}
	public static void main(String[] args) {
		//创建一个ChromeDriver对象,后续与网页元素的交互都得要依赖这个对象。
		WebDriver driver = new ChromeDriver();
		try {
			test(driver);
		} catch (Exception e) {
			e.printStackTrace();
		} finally {
			driver.quit();
		}
	}

}

      在上面的代码中,最重要的两个类是 WebDriver、WebElement,driver通过各种不同的方式查找到Web元素,然后使用该对象进行各种操作(如点击、输入元素、清除元素)与元素交互,从而实现了Web应用的测试。

    3.2 、WebDriver API 的使用:

    3.2.1 控制浏览器:

    对浏览器的控制是Selenium的一个重要应用,可以对浏览器最大化,设置浏览器的高度和宽度以及对浏览器进行导航操作等。

// 浏览器打开网址。
 driver.get("https://www.baidu.com");
 // 浏览器最大化。
  driver.manage().window().maximize();
 // 根据driver获取浏览器窗口对象,并设置浏览器的窗口大小。对浏览器的窗口管理,都是通过该对象进行的
  Window window = driver.manage().window();
     Dimension arg0 = new Dimension(600, 900);
     window.setSize(arg0);
 // 根据driver获取浏览器导航对象,根据此对象,可以对浏览器进行刷新,前进后退操作。
   Navigation navigate = driver.navigate();
       navigate.back();
       navigate.forward();
       navigate.refresh();
 // 浏览器关闭
   driver.close();

      3.2.2 元素定位方法:

       使用Selenium对Web应用进行功能测试,首先做的就是定位到目标元素,然后才能测试其是否满足功能需求。我们可以通过浏览器的自带的调试工具,来获取网页元素的属性。

     1)id,通过元素的ID属性来定位一个或者多个元素。

WebElement kwElement = driver.findElement(By.id("kw"));
           kwElement.clear();
           kwElement.sendKeys("安徽工业大学");

     2)name,通过元素的name属性来定位一个或者多个元素。

WebElement kwElement = driver.findElement(By.name("***"));

     3)className,tag,css selector。

driver.findElement(By.className("***"));
driver.findElement(By.tagName("***"));
driver.findElement(By.cssSelector("***"));

     4)linkText,通过链接文字去查找元素;partialLinkText,通过部分链接文字去查找元素。

<a href="www.baidu.com">
   <span class="label">百度一下,你就知道</span>
</a>

     以上面的例子为例,这个在页面上展示的就是一个超链接,我们可以通过超链接的全部或者部分文字来定位元素。

driver.findElement(By.linkText("百度一下,你就知道"));
driver.findElement(By.partialLinkText("百度一下"));

      5)XPath定位方式,XPath 是一门在 XML 文档中查找信息的语言。XPath 可用来在 XML 文档中对元素和属性进行遍历。web网页内容是根据HTML文档结构进行编排的,XPath 是根据元素节点在web网页中的节点位置来进行定位。如下图所示

driver.findElement(By.xpath("(.//*[normalize-space(text()) and normalize-space(.)='学籍证明'])[1]/following::div[1]"));

       在一个完整的Web页面中,拥有相同属性的网页元素通常不止一个,因此,上面所说的driver.findElement拥有复数形式,即:driver.findElements(By.***("***"));具体是用什么方法,这个要看页面的整体布局。

       在有些时候,一个页面会嵌套多个frame,这时候如果想要定位某一个frame中的元素,需要切换到frame中去,操作完成之后,返回默认文档。如下:

//根据id找到frame元素(上面几种定位方式都可以),然后切换过去。
WebElement frameElement = driver.findElement(By.id("frame_id"));
driver.switchTo().frame(frameElement);
driver.switchTo().defaultContent();

     3.2.3 鼠标、键盘事件操作:

     在Web测试中,常见的鼠标操作有:单击、双击、右击、拖拽、悬浮等操作,这些方法封装在了Actions类中。方法有:           ① contextClick(),右击; ② doubleClick(),双击; ③ dragAndDrop(source, target),拖拽; ④  moveToElement() 悬浮在某一元素上。

//构造Actions类,使用该类进行鼠标的各种操作
Actions actions = new Actions(driver);
//鼠标右击
actions.contextClick(kwElement).perform();
//鼠标双击
actions.doubleClick().perform();
//鼠标悬浮在某一元素上
actions.moveToElement(kwElement).perform();

      键盘的一些操作主要就是输入键盘上的有特殊功能的字符,比如 回车键,删除键等以达到相应地目的。键符封装在了Keys类中,主要有:删除、空格、制表、回车等。使用组合的Ctrl+a、c等还可以实现选择和复制等功能。

//删除
kwElement.sendKeys(Keys.BACK_SPACE);
//空格
kwElement.sendKeys(Keys.SPACE);
//回车
kwElement.sendKeys(Keys.ENTER);
//选择
kwElement.sendKeys(Keys.CONTROL,"a");
//复制
kwElement.sendKeys(Keys.CONTROL,"c");

     3.3 、 断言的使用 :

     断言常用来验证应用程序的状态是否和预期的一致。常见的断言包括:验证页面内容,如标题是否为X或当前位置是否正确,或是验证该复选框是否被勾选。

  Selenium 提供了三种模式的断言:assert 、verify、waitfor。三种模式代表的含义分别为:
  ①  assert 失败时,该测试将终止。
  ②  verify 失败时,该测试将继续执行,并将错误记录下来。
  ③  waitfor 用于等待某些条件变为真。如果该条件为真,继续执行。如果该条件为假,则将失败并暂停测试。

//判断当前页面title与预期结果是否一致         
Assert.assertEquals(driver.getTitle(), "百度一下,你就知道");

四 、航天中认功能测试案例。

  4.1、运行结果:

运行结果

  4.2 、代码示例:

public class Example {

	public static void test(WebDriver driver) {
try {
			
        	driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);
       	    driver.manage().window().maximize();
        	driver.get("http://114.116.106.156/show-how/common/login.jsp");
        	//登陆
        	driver.findElement(By.id("username")).sendKeys("test006");
        	driver.findElement(By.id("password")).sendKeys("1");            	
        	driver.findElement(By.xpath("//*[@id=\"userForm\"]/div[1]/div[4]/button")).click();
        	Thread.sleep(1000);
        	//修改个人信息
        	driver.findElement(By.xpath("//*[@id=\"main-menu\"]/li[2]/a")).click();
        	Thread.sleep(1000);
        	driver.findElement(By.xpath("//*[@id=\"main-menu\"]/li[2]/ul/li[1]/a")).click();
        	Thread.sleep(1000);
        	driver.findElement(By.xpath("//*[@id=\"main-menu\"]/li[2]/ul/li[1]/ul/li[1]/a")).click();
        	Thread.sleep(1000);
        	//修改维护信息
        	driver.findElement(By.xpath("//*[@id=\"pimInfo_email\"]")).clear();
        	Thread.sleep(1000);
        	driver.findElement(By.xpath("//*[@id=\"pimInfo_email\"]")).sendKeys("123456@163.com");
        	Thread.sleep(1000);
        	driver.findElement(By.xpath("//*[@id=\"pimInfo_cellphone\"]")).clear();
        	Thread.sleep(1000);
        	driver.findElement(By.xpath("//*[@id=\"pimInfo_cellphone\"]")).sendKeys("12345678901");
        	Thread.sleep(1000);
        	driver.findElement(By.xpath("//*[@id=\"submitButton\"]")).click();
        	Thread.sleep(5000);
        	//退出浏览器
        	driver.close();       	
		} catch (Exception e) {
			// TODO: handle exception
		}
	}

	public static void main(String[] args) {
		WebDriver driver = new ChromeDriver();
		try {
			test(driver);
		} catch (Exception e) {
			e.printStackTrace();
		} finally {
			driver.quit();
		}
	}

}

 

<div style="color:#313131;font-size:16px;"> 课程介绍 </div> <p> <br /> </p> <p> <span><span style="font-size:16px;">你是否在寻找机会进入</span><span style="color:#E67E22;font-size:16px;">自动化测试领域</span><span style="font-size:16px;">?</span></span> </p> <p> <span><span style="font-size:16px;">你是否渴望学习selenium webdriver + Java以及</span><span style="color:#E67E22;font-size:16px;">最新的框架和技术</span><span style="font-size:16px;">进行web自动化测试?</span></span> </p> <p> <span><span style="font-size:16px;">你是否感兴趣</span><span style="color:#E67E22;font-size:16px;">学习Selenium</span><span style="font-size:16px;">如何用在你现有的项目里的?</span></span> </p> <p> <span style="font-size:16px;">这门课带你从Selenium搭建环境开始讲起,然后学习selenium,TestNG, logback, maven, jenkins。</span> </p> <p> <span><span><span style="font-size:16px;">我们假设学员没有任何自动化经验,来设计的这套课程。每个课题都</span><span style="color:#E67E22;font-size:16px;">从最基础的开始</span><span style="font-size:16px;">讲起。</span><span style="color:#E67E22;font-size:16px;">Selenium相关的该覆盖的课题都覆盖了。</span></span></span> </p> <p> <span><span style="font-size:16px;">例子都是来自于</span><span style="color:#E67E22;font-size:16px;">真实的web应用项目</span><span style="font-size:16px;">,帮助你理解不同的组件怎么用上自动化,这将展示给你一个行业层面的框架,增加自信心。</span></span> </p> <p> <span><span style="color:#E67E22;font-size:16px;">全网没有其他课程像这门课涵盖到如此之深的细节</span><span style="font-size:16px;">。</span></span> </p> <p> <span><span style="font-size:20px;"><span>您将会学到什么</span></span></span> </p> <ul> <li> <span style="font-size:16px;">学完课程以后,你将拥有完整的Selenium Webdriver知识</span> </li> <li> <span style="font-size:16px;">你将具备从头开始设计Page Object、Page Factory、DATADRIVEN等搭建自动化框架的能力</span> </li> <li> <span><span style="font-size:16px;">用100多个实例Selenium现实</span><span style="font-size:16px;">场景应用进行深入理解</span></span> </li> <li> <span style="font-size:16px;">全面了解TestNG, Maven, Jenkins, HTML报告,多浏览器并行测试</span> </li> <li> <span style="font-size:16px;">了解数据库测试和使用Selenium进行性能测试</span> </li> <li> <span style="font-size:16px;">你将彻底了解testNG框架</span> </li> <li> <span style="font-size:16px;">你从网上随便选择一个网站,都可以实现自动化,用所有可能的测试用例进行自动化测试</span> </li> <li> <span style="font-size:16px;">将提高你的编码技能,以编写最优化的自动化测试用例代码</span> </li> <li> <span style="font-size:16px;">你基本可以搞定任何Selenium面试,并能从设计阶段开始领导整个Selenium自动化项目</span> </li> <li> <span style="font-size:16px;">你应该能够使用应用程序的GUI来验证数据完整性</span> </li> <li> <span style="font-size:16px;">你将能够创建漂亮的报告来打动客户或领导</span> </li> <li> <span style="font-size:16px;">更深入地理解自动化指南和代码质量标准</span> </li> <li> <span style="font-size:16px;">会附带一个练习网站,可以用上所有可用的WebDriver功能,实现自动化</span> </li> </ul> <p> <span style="font-size:20px;"><span style="color:#3498DB;"><span>【适合人群】</span></span></span> </p> <ul> <li> <span style="font-size:16px;">软件手动测试人员想转为自动化测试的人员</span> </li> <li> <span style="font-size:16px;">自动化软件测试人员想加强专业技能的</span> </li> <li> <span style="font-size:16px;">刚毕业学生想从事软件行业</span> </li> <li> <span style="font-size:16px;">QA 组长或项目经理</span> </li> </ul> <p> <span style="color:#3498DB;"><span style="font-size:20px;"><span>【课程优势】</span></span></span> </p> <p> <span style="font-size:16px;">学完课程以后,你将拥有完整的Selenium Webdriver知识</span> </p> <p> <span style="color:#3498DB;"><span style="font-size:20px;"><span>【讲师介绍】</span></span></span> </p> <p> <span style="font-size:16px;"><span style="color:#E67E22;"><span>资质介绍:</span></span></span> </p> <p> <span style="font-size:16px;">12年以上软件测试工作经验,其中7年以上自动化测试开发经验</span> </p> <p> <span style="font-size:16px;">新书“Python3+Selenium3自动化测试项目实战”作者</span> </p> <p> <span><br /> </span> </p> <p> <img src="https://img-bss.csdn.net/201912160910055665.jpg" alt="" /><img src="https://img-bss.csdn.net/201912160910249590.jpg" alt="" /><img src="https://img-bss.csdn.net/201912160910311596.jpg" alt="" /> </p> <br /> <br />
相关推荐
©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值