快速入门:Java+testNG+selenium
第一章环境的配置
Java的jbk中是没有操作的浏览器的方法的api的,但是selenium中有webdrive接口,并由各浏览器的实现,所以必须条件之一就是往项目中加入selenium提供的代码,也就是jar文件。
连接:链接:https://pan.baidu.com/s/1sAImB5ryqyjX1R_vP_YWiQ
提取码:clhy
把他build到自己的项目中,就ok了 idea如何加入jar请百度
有了jar以后我们可以做的事就是如何去调用各个浏览器的驱动,根据本机浏览器的版本去下载好驱动按以下代码设置或者手动在环境变量中设置
下面是testNG来进行的登录百度账号自动化脚本,之中体现了如何运用id,linkText,定位元素的方法和代码配置驱动的环境变量,比较简单可以有一定Java基础的会很明白。
@BeforeClass
public void loginbaidu(){
//把驱动应用放入本地文件
File file =new File("D:\\driver\\chromedriver.exe");
//运用System设置读取该文件的环境变量,也可以在电脑系统中的path直接的配置;
System.setProperty("webdriver.chrome.driver",file.getAbsolutePath());
//获取驱动,:也就是启动selenium的服务
WebDriver driver = new ChromeDriver();
try{
//获取要访问的地址,
driver.get("https://www.baidu.com/");
//获取元素
driver.findElement(By.linkText("登录")).click();
//跳转页面时因为浏览器速度或者电脑等外部原因可以设置线程睡眠时间进行等待浏览器响应
Thread.sleep(3000);
driver.findElement(By.id("TANGRAM__PSP_10__footerULoginBtn")).click();
Thread.sleep(3000);
//输入密码,账号是默认有值的为了保密没有写输入账号那句,密码一定要输入但不能是我这样
driver.findElement(By.id("TANGRAM__PSP_10__password")).sendKeys("*******");
Thread.sleep(3000);
driver.findElement(By.id("TANGRAM__PSP_10__submit")).click();
}catch (Exception E){
System.out.println("not find element");
}finally {
//不论是否成功需要关闭驱动,不然多次启动或造成进程中全是浏览器exe,影响电脑性能
driver.close();
}
}
}
第二章XPATH定位
2.selenium进行ui自动化测试,最主要的就是精准的获取到页面中的元素,对其进行id定位和linkText文本定位上面代码中已经实现,下面说xpath定位方法;
以百度登录为列
找到百度中的登录页面div,在这里查看到,该div的id为u1此div上还有两层div,并且该div中封装的都为标签,而且登录按钮是没有id的。如何用xpath去定位呢???
别急慢慢的一层一层拨开她的衣服==!
首先定位她的div第一层div //[@id='head] //表示该html下的根目录中id为head的标签
第二层div //[@id='head]/div[@class=‘head_wrapper’] @后面跟的是该标签下任意属性名
第三层div //[@id=‘head]/div[@class=‘head_wrapper’] /div[@id=’ u1’]
最后一层精准定位到登录按钮
driver.findElement(By.xpath("//*[@id=‘head]/div[@class=‘head_wrapper’]/div[@id=’ u1’]/a[@name=‘tj_login’]"));
现在就可以准确定位到登录这个按钮了,但是在一般开发中,xpath是比较复杂的,一般能通过id或者其他的元素准确定位就ok,特别注意:在运用xpath的方法中最好使用相对路径来进行定位,以避免路径不精准。因为xpath路径会随着页面元素布局的改变而改变;并且不同的浏览器对xpath的实现不一样。
还有一种定位比较常用的
百度登录源码;
登录
通过contains()来模糊定位href属性包含:https://passport.baidu.com/v2/?login&
driver.findElement(By.xpath(“//a[contains(@href,‘https://passport.baidu.com/v2/?login&’)]”));
通过start-with()来模糊定位:开头包含的意思,href属性开头包含:https://passport.baidu.com/v2/?login&
driver.findElement(By.xpath(“//a[start-with(@href,‘https://passport.baidu.com/v2/?log’)]”));
第三章CSS定位
粘贴百度的页面超文本
WebElement ele = driver.findElement(By.cssSelector(“a.lb”));
使用相对ID选择器定位元素,方法如下:
2.通过id获取登录标签外的div
指定一个 HTML 标签,然后加上一个“#”符号,跟上 id 的属性值
WebElement ele = driver.findElement(By.cssSelector(“input# u1”));
第四章testing
TestNG环境配置,eclipse下载插件 :https://github.com/cbeust/testng-eclipse/
最好选用稳定版的,测试版的也可以,毕竟作为测试人员可以为咱们的工具做点贡献做好
下载后加入eclipse。
IDEA IntelliJ插件系统会自带的。
注解 描述
@BeforeSuite:所有测试方法运行前先运行被@BeforeSuite注释的方法仅运行一次。
@AfterSuite 所有测试方法运行后,运行被@AfterSuite注释的方法,仅运行一次。
@BeforeClass 类中有方法被@BeforeClass注释后,先执行该方法才能执行类中其他的方法,
注释方法仅运行一次。(思考:如果类中也有被@BeforeSuite注释呢)
@AfterClass 被@AfterClass注释的方法在当前类的第一个测试方法之后运行,注释方法仅运行一次
@BeforeTest 被@BeforeTest的方法将在testNG的xml文件标签内的类的所有测试方法运行之前运行。
@AfterTest 被@AfterTest的方法将在在testNG的xml文件在testNG的xml文件标签内的类的所有测试方法运行之后运行。
@BeforeGroups 被@BeforeGroups(“组列表”)组列表代表:一个组或多个组,在这些组中第一个测试方法运行之前不久运行;
@AfterGroups 被@BeforeGroups(“组列表”)组列表代表:一个组或多个组,在这些组中第一个测试方法运行之后不久运行;
@BeforeMethod 被@BeforeMethod(“方法名”)注释方法将在每个测试方法之前运行。
@AfterMethod 被@AfterMethod注释的方法将在每个测试方法之后运行。
@DataProvider 被@DataProvider注释标记一种方法来提供测试方法的数据。 注释方法必须返回一个Object [] [],其中每个Object []可以被分配给测试方法的参数列表。 要从该DataProvider接收数据的@Test方法需要使用与此注释名称相等的dataProvider名称。
@Factory 将一个方法标记为工厂,返回TestNG将被用作测试类的对象。 该方法必须返回Object []。
@Listeners 定义测试类上的侦听器。
@Parameters 描述如何将参数传递给@Test方法。
为更真实的看到运行的顺序
实例:
import org.testng.annotations.*;
public class MytestNG {
@BeforeSuite
public void beforeSuite() {
System.out.println(this.getClass().getName() + " beforeSuite");
}
@AfterSuite
public void afterSuite() {
System.out.println(this.getClass().getName() + " afterSuite");
}
@BeforeTest
public void beforeTest() {
System.out.println(this.getClass().getName() + " beforeTest");
}
@AfterTest
public void afterTest() {
System.out.println(this.getClass().getName() + " afterTest");
}
@BeforeClass
public void beforeClass() {
System.out.println(this.getClass().getName() + " beforeClass");
}
@AfterClass
public void afterClass() {
System.out.println(this.getClass().getName() + " afterClass");
}
@BeforeMethod
public void beofreMethod() {
System.out.println(this.getClass().getName() + " beforeMethod");
}
@AfterMethod
public void afterMethod() {
System.out.println(this.getClass().getName() + " afterMethod");
}
@Test
public void test1() {
System.out.println(this.getClass().getName() + " test1");
}
@Test
public void test2() {
System.out.println(this.getClass().getName() + " test2");
}
}
配置XML文件:
运行结果:
[TestNG] Running:
C:\Users\Lenovo\IdeaProjects\chromeTest\src\test\java\mytestng.xml
MytestNG beforeSuite
MytestNG beforeTest
MytestNG beforeClass
MytestNG beforeMethod
MytestNG test1
MytestNG afterMethod
MytestNG beforeMethod
MytestNG test2
MytestNG afterMethod
MytestNG afterClass
MytestNG afterTest
MytestNG afterSuite
Process finished with exit code 0
现在一目了然:
第五章 selenium+testNG:
有样本但不方便展示,等有空搞一套邮箱登录自动化测试:
欢迎大神指点。
作者:不愿透露姓名的张天星啊