selenium自动化测试02
小练习
测试注册功能
创建packa包 autotest02,创建class类 Reg.class 注册功能
获得注册网址(http://localhost:8088/index.php?m=user&c=public&a=reg)
编写自动化测试的前置操作(打开浏览器,最大化,输入网址)
//打开浏览器
WebDriver driver = new FirefoxDriver();
//窗口最大化
driver.manage().window().maximize();
//访问网址
String url = "http://localhost:8088/index.php?m=user&c=public&a=reg";
driver.get(url);
前置操作已完成,接下来获取注册页面每一个输入框的元素,共6个
//定位 错误测试数据
driver.findElement(By.name("username")).sendKeys("1");
driver.findElement(By.name("password")).sendKeys("2");
driver.findElement(By.name("userpassword2")).sendKeys("3");
driver.findElement(By.name("mobile_phone")).sendKeys("4");
driver.findElement(By.name("email")).sendKeys("5");
driver.findElement(By.className("reg_btn")).click();
在此之前先注册账号,我们可以发现注册成功后会跳转网页,所以要给强制等待时间,然后进行判断
// 强制等待10s
Thread.sleep(10000);
// 获取当前网页网址
String nowUrl = driver.getCurrentUrl();
// 比较注册后和注册前
if (url.equals(nowUrl)) {
System.out.println("注册失败");
System.out.println("用例成功");
} else {
System.out.println("注册成功");
System.out.println("用例失败");
}
代码整合,进行测试,输出结果
package org.example.autotest02;
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.firefox.FirefoxDriver;
public class Reg {
public static void main(String[] args) throws InterruptedException {
//打开浏览器
WebDriver driver = new FirefoxDriver();
//窗口最大化
driver.manage().window().maximize();
//访问网址
String url = "http://localhost:8088/index.php?m=user&c=public&a=reg";
driver.get(url);
//定位 错误测试数据
driver.findElement(By.name("username")).sendKeys("1");
driver.findElement(By.name("password")).sendKeys("2");
driver.findElement(By.name("userpassword2")).sendKeys("3");
driver.findElement(By.name("mobile_phone")).sendKeys("4");
driver.findElement(By.name("email")).sendKeys("5");
driver.findElement(By.className("reg_btn")).click();
// 抓窗口中网址
// 强制等待10s
Thread.sleep(10000);
// 获取当前网页网址
String nowUrl = driver.getCurrentUrl();
// 比较注册后和注册前
if (url.equals(nowUrl)) {
System.out.println("注册失败");
System.out.println("用例成功");
} else {
System.out.println("注册成功");
System.out.println("用例失败");
}
}
}
前情回顾
在selenium01里面讲了一些环境搭建,一些代码语法。在这里我们进行回顾一下
基础方法:
打开浏览器 WebDriver driver = new FixfoxDriver();
窗口最大化 driver.manage().window().maximize(); //防止窗口过小,个别元素显示不清
访问网址 String url = "网址"
driver.get(url)
获取当前网页网址 String nowurl = driver.getCurrentUrl();
强制等待 Thread.sleep(10000);
关闭浏览器 driver.quit();
元素定位:
driver.findElement() 只能定位符合规则的第一个元素/定位元素的方式尽量唯一/必须定位到元素,定位不到报错NoSuchElementException
By.id/name/className 使用元素里面的某属性定位元素
元素操作:
.click(); 点击元素
.sendKeys("要输入的数据")
开始编程
我们先注册一个账户,然后进行登录,账号设置--》个人资料--》个人信息
在这里呢,我们先来感受一下,去模拟自动化的操作流程:首先呢,打开网页,输入网址,进入网站,输入账号密码,进行登录,网页跳转,进入到个人信息页面,点击账号设置,点击个人资料,然后修改个人信息。就这一套操作流程,我们可以代入到编程世界里面
创建class类ChangeUserInfo.java 修改用户信息
编写登录操作
package org.example.autotest02;
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.firefox.FirefoxDriver;
import java.util.concurrent.TimeUnit;
public class ChangeUserInfo {
public static void main(String[] args) {
//前置
WebDriver driver = new FirefoxDriver();
driver.manage().window().maximize();
//隐式等待 只有在完成当前操作后,才进行下一次操作
driver.manage().timeouts().implicitlyWait(15, TimeUnit.SECONDS);
//登录
driver.get("http://localhost:8088/index.php?m=user&c=public&a=login");
driver.findElement(By.id("username")).sendKeys("test123");
driver.findElement(By.name("password")).sendKeys("123456");
driver.findElement(By.className("login_btn")).click();
}
}
成功进入个人信息页面,然后观察一下当前页面,第一步我们要点击账号设置,右键检查,看看元素
是一个超链接形式的,我们可以使用linkText来定位元素,还有个人资料也是一样,还有一种定位方法partialLinkText来定位
//修改个人信息
//定位账号设置
driver.findElement(By.linkText("账号设置")).click();
driver.findElement(By.partialLinkText("个人资料")).click();
接下来就是对输入框和确定按钮进行元素定位,直接右键检查,查找id、name和class
在运行代码的时候我们会发现已经自动写进去了,然后我们再次运行的时候,会发现,输入的数据就写到当前的数据后面了,所以很难受,这时候呢,我们就可以用另一个语法.clear();清除
driver.findElement(By.id("true_name")).clear();//clear:清除当前数据
driver.findElement(By.id("true_name")).sendKeys("张三");
性别一栏,有三个数据,我们可以使用xpath来进行定位,使用元素的名字和任意属性的值定位:"//元素名[@属性='属性值']"
//点击男
driver.findElement(By.xpath("//input[@value='1']")).click();
最后代码整合,进行测试
package org.example.autotest02;
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.firefox.FirefoxDriver;
import java.util.concurrent.TimeUnit;
public class ChangeUserInfo {
public static void main(String[] args) {
//前置
WebDriver driver = new FirefoxDriver();
driver.manage().window().maximize();
//隐式等待 只有在完成当前操作后,才进行下一次操作
driver.manage().timeouts().implicitlyWait(15, TimeUnit.SECONDS);
//登录
driver.get("http://localhost:8088/index.php?m=user&c=public&a=login");
driver.findElement(By.id("username")).sendKeys("test123");
driver.findElement(By.name("password")).sendKeys("123456");
driver.findElement(By.className("login_btn")).click();
//修改个人信息
//定位账号设置
driver.findElement(By.linkText("账号设置")).click();
driver.findElement(By.partialLinkText("个人资料")).click();
driver.findElement(By.id("true_name")).clear();
driver.findElement(By.id("true_name")).sendKeys("张三");
driver.findElement(By.name("qq")).sendKeys("1234568");
//点击男
driver.findElement(By.xpath("//input[@value='1']")).click();
driver.findElement(By.className("btn4")).click();
}
}
测试成功
创建方法
我们可以发现,在进行登陆的时候,这一段代码使用非常多,为了减少代码的冗余,我们可以创建方法,之后进行调用
创建class类 LoginPage.java
package org.example.autotest02;
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
public class LoginPage {
public static void loginWithUrl(WebDriver driver,String username,String password){
driver.get("http://localhost:8088/index.php?m=user&c=public&a=login");
loginTest(driver,username,password);
}
public static void loginTest(WebDriver driver,String username,String password){
driver.findElement(By.id("username")).sendKeys(username);
driver.findElement(By.name("password")).sendKeys(password);
driver.findElement(By.className("login_btn")).click();
}
}
登录的方法我们已经完成了
接下来我们开始测试添加地址功能
添加地址
创建class类AddAddress.java 添加地址
我们来过一下流程,登录--》账号设置--》修改默认地址
有六个需要输入的内容
收件人姓名、详细地址、邮政编码、联系电话和添加地址按钮比较好办,主要来看一下寄送区域,这个属于下拉框,只有在第一项选择之后,第二项才能出来,不能越级
第一项未选择,我们可以看到是空的
第一项选择之后,第二项才会出来,但第三项没有出来
第一项和第二项选择之后,第三项才会出来
这样的一个顺序的过程,不能越级,否则找不到元素,会报错。这里我们可以使用xpath来定位元素,xpath("//option[@value = '110000']"),以北京为例,进行编写(当然还有更简单的方法,在03会提到)。
所以整体代码如下
driver.findElement(By.xpath("//option[@value = '110000']")).click();
driver.findElement(By.xpath("//option[@value = '110100']")).click();
driver.findElement(By.xpath("//option[@value = '110101']")).click();
开始编写,前置+登录方法调用
//前置
FirefoxDriver driver = new FirefoxDriver();
driver.manage().window().maximize();
//隐式等待
driver.manage().timeouts().implicitlyWait(15, TimeUnit.SECONDS);
//登录
LoginPage.loginWithUrl(driver,"test123","123456");
进行添加地址操作
driver.findElement(By.linkText("账号设置")).click();
driver.findElement(By.partialLinkText("个人资料")).click();
driver.findElement(By.partialLinkText("收货地址")).click();
driver.findElement(By.id("username")).sendKeys("赵四");
driver.findElement(By.xpath("//option[@value = '110000']")).click();
driver.findElement(By.xpath("//option[@value = '110100']")).click();
driver.findElement(By.xpath("//option[@value = '110101']")).click();
driver.findElement(By.id("address")).sendKeys("成华大道 二仙桥");
driver.findElement(By.id("zip")).sendKeys("110000");
driver.findElement(By.id("mobile")).sendKeys("15165236547");
driver.findElement(By.className("btn3")).click();
代码整合
package org.example.autotest02;
import org.openqa.selenium.By;
import org.openqa.selenium.firefox.FirefoxDriver;
import java.util.concurrent.TimeUnit;
public class AddAddress {
public static void main(String[] args) {
//前置
FirefoxDriver driver = new FirefoxDriver();
driver.manage().window().maximize();
//隐式等待
driver.manage().timeouts().implicitlyWait(15, TimeUnit.SECONDS);
//登录
LoginPage.loginWithUrl(driver,"test123","123456");
driver.findElement(By.linkText("账号设置")).click();
driver.findElement(By.partialLinkText("个人资料")).click();
driver.findElement(By.partialLinkText("收货地址")).click();
driver.findElement(By.id("username")).sendKeys("赵四");
driver.findElement(By.xpath("//option[@value = '110000']")).click();
driver.findElement(By.xpath("//option[@value = '110100']")).click();
driver.findElement(By.xpath("//option[@value = '110101']")).click();
driver.findElement(By.id("address")).sendKeys("成华大道 二仙桥");
driver.findElement(By.id("zip")).sendKeys("110000");
driver.findElement(By.id("mobile")).sendKeys("15165236547");
driver.findElement(By.className("btn3")).click();
}
}
测试结果成功