(本文欢迎转载,只需附上来源:https://blog.csdn.net/actionwind/article/details/103437712)
Selenium是用于web自动化测试的工具,这次来介绍一下它的使用。
Selenium由好几部分组成,我们今天主要说的是它的WebDriver部分,这部分需要测试者自己编写脚本代码。
一、首先来介绍一下它的Java开发环境的搭建:
1、首先安装jdk,详细的安装设置方法我这里就不说了,网上教程一搜一大把,总之先把它装好;
2、安装Eclipse,安装方法同上,哈哈;
3、在Eclipse中新建一个java工程,在菜单File->Properties ->Java Build Path -> Libraries中导入Selenium的jar包。
(jar包到官网下载,比如说我下载的是selenium-java-3.141.59.zip,解压后里面有两个jar,全部导入,里面还有个libs文件夹,里面的jar也全部导入。)
好,至此,相应的开发环境就全部搭建好了,一共三大步,很简单吧。
事实上,为了让写好的脚本代码能够运行,还需要启动浏览器的驱动器,比如我用Firefox,它的驱动器叫做GeckoDriver,也同样是在官网下载,然后在代码指明它的路径并调用即可,下文会说到。
二、好了,既然环境已经搭好,那就来写一个简单的测试用例:
package com.mypro.jase;
import java.util.*;
import org.junit.Assert;
import org.junit.Test;
import org.openqa.selenium.By;
import org.openqa.selenium.JavascriptExecutor;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.firefox.FirefoxDriver;
public class TestLibrary extends Assert {
private WebDriver driver;
@Test //有这个标志就会让下面这个方法成为一条测试用例
public void test1() {
//首先设置好浏览器驱动器:
System.setProperty("webdriver.gecko.driver", "e:\\copy\\geckodriver.exe");
//新建一个ff浏览器驱动器对象
driver=new FirefoxDriver();
//访问你想测试的网页
driver.get("http://szlhlib.org.cn/");
//点击搜索框
WebElement searchBox=driver.findElement(By.id("key"));
searchBox.click();
//设置要搜索的内容
searchBox.sendKeys("人性的弱点\n");
//点击搜索按钮,将会打开新的页面窗口显示搜索结果(本想用点击按钮进行搜索,但发现这个网站的搜索按钮有问题。找到bug了,有空跟这个网站的人提交一下bug,哈哈)
// WebElement searchButton=driver.findElement(By.id("doSearch"));
// searchButton.click();
//跳转到搜索结果的窗口,这里采用url来判断所跳转到的是否为目标窗口
Set
//对窗口进行遍历,直到找到所指定的窗口(好像selenium就是这么愚蠢,不能直接跳转到指定窗口,没办法)
for(String s:handles){
driver.switchTo().window(s);
if(driver.getCurrentUrl()=="http://219.134.63.22/Search/searchshow.jsp?v_tablearray=bibliosm%2C&v_book=on&eventsite=WWW-044010&v_index=all&v_value=%E4%BA%BA%E6%80%A7%E7%9A%84%E5%BC%B1%E7%82%B9&cirtype=&v_startpubyear=&v_endpubyear=&v_publisher=&v_author=&sortfield=score&sorttype=desc&pageNum=10")
break;
}
//加个延迟,否则下面的点击操作太快执行的话会找不到相应的元素
try {
Thread.sleep(5000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
//再试一下点击其中一个搜索结果。
driver.findElement(By.linkText("卡耐基经典全集:《人性的弱点》《美好的人生》/(美)卡耐基著;詹衡宇译"))
.click();
//加个延迟,否则下面的断言太快执行的话会找不到相应的元素
try {
Thread.sleep(2000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
//断言,用于检查测试结果,如果指定的元素没找到会输出指定的错误信息。(需要注意的是,断言需要写在一个测试用例的末尾,否则如果为False的时候在测试报告中不会被记录为Failure,而是Error。)
assertTrue("《人性的弱点》没找到。", check(driver,By.partialLinkText("人性的弱点")));
}
//此方法用于判断页面元素是否存在
public static Boolean check(WebDriver driver,By seletor) {
try {
driver.findElement(seletor);
return true;
} catch (Exception e) {
// TODO: handle exception
return false;
}
}
}
写好后点击Eclipse的Run按钮它就会自动打开浏览器运行测试了。
补充说明一点:在代码中获取并控制网页中的页面组件元素,Selenium用的是By类,需要先在浏览器中要查看元素的属性。可以使用浏览器的开发者模式查看,
在Firefox中是点击菜单中的Web Developer-> Inspector。
在Chrome中是点击菜单中的更多工具->开发者工具。
在IE中按快捷键F12就行了。
进去开发者界面之后三者都是点击左上角的指针状图标,然后将鼠标移动到要定位的页面元素即可看到它的属性。
在写这段代码的时候的一个小心得:如果提示说找不到页面元素,可以考虑一下是否在操作步骤之间加一个延迟。
三、接下来学一下如何导出测试报告:
Selenium导出测试报告有很多种方法,我觉得简单的方法是用Junit的报告,因为Java版的Selenium本来就结合了Junit,所以就直接用它的测试报告,详细的步骤有一位朋友已经无私分享出来,大家可以看看:
https://blog.csdn.net/haorenmin2008/article/details/44201549
不过这篇介绍有个小小的纰漏,那就是在第三步没有说要勾选junitreport选项,这样的话不会生成网页版的报告。勾上就可以了。
如果过程中遇到ant版本过低的问题,这里有解决方案:https://www.jianshu.com/p/d1d0c1f08f40
好,到此为止一个完整的自动化测试过程已经介绍完毕,当然,其实还有很多细节需要去学习和研究,大家好好加油吧!