selenium 入门学习 (二)
一个百度登陆的UI实现:import java.io.File;
import java.io.IOException;
import java.util.concurrent.TimeUnit;
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;
public class SeleniumTest {
public static void main(String[] args) throws IOException {
String driverPath = new File("./").getCanonicalPath() + "/src/main/resources/driver/chromedriver.exe";
System.setProperty("webdriver.chrome.driver", driverPath);
WebDriver webDriver = new ChromeDriver();
webDriver.manage().timeouts().implicitlyWait(20, TimeUnit.SECONDS);
webDriver.get("https://www.baidu.com/");
webDriver.manage().window().maximize();
//点击登陆按钮
webDriver.findElement(By.xpath("//*[@id='u1']/a")).click();
webDriver.findElement(By.id("TANGRAM__PSP_10__userName")).sendKeys("用户名称");
webDriver.findElement(By.id("TANGRAM__PSP_10__password")).sendKeys("用户密码");
webDriver.findElement(By.id("TANGRAM__PSP_10__verifyCode")).sendKeys("验证码");
webDriver.findElement(By.id("TANGRAM__PSP_10__submit")).click();
//在登录后界面查找用户名是否存在,获得用户名
String username = webDriver.findElement(By.id("user-name")).getText();
//判断是否一致,设置断言
if (username.contains("用户名称")) {
System.out.print(true);
} else {
System.out.print(false);
}
webDriver.close();
}
} 码中存在的问题:
测试类存在参数化问题:用户名,密码,验证码,定位的Xpath路径等;
测试类只能使用一次,如果需要执行一些异常用例就需要重写;
测试类对测试结果的判断,断言很难在执行后进行提取;
测试类中存在一些异常场景没有进行考虑;
针对上述问题引入testng测试框架:
Eclipse安装testng 在网上有很多内容,这里就不叙述;安装完成testng后,在maven的pom.xml
文件引入testng包:
<dependency>
<groupId>org.testng</groupId>
<artifactId>testng</artifactId>
<version>6.9.10</version>
</dependency> testng包引入完成后,新建一个class文件,如下图 在输入 @Test后,通过ATL+ /显示出下图,选择Testng的注解;
下面代码就是一个Testng框架的测试代码基础:
import org.testng.annotations.Test;
public class SeleniumTest1 {
@Test
public void test() {
}
} 将百度UI实现webDriver代码放入到testng中:import java.io.File;
import java.io.IOException;
import java.util.concurrent.TimeUnit;
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;
import org.testng.annotations.Test;
public class SeleniumTest1 {
@Test
public void test() throws IOException {
// 通过查找当前路径返回一个规范化路径,这样可以把工程放到不同地方执行了
String driverPath = new File("./").getCanonicalPath() + "/src/main/resources/driver/chromedriver.exe";
System.setProperty("webdriver.chrome.driver", driverPath);
WebDriver webDriver = new ChromeDriver();
webDriver.manage().timeouts().implicitlyWait(20, TimeUnit.SECONDS);
webDriver.get("https://www.baidu.com/");
webDriver.manage().window().maximize();
webDriver.findElement(By.xpath("//*[@id='u1']/a")).click();
webDriver.findElement(By.id("TANGRAM__PSP_10__userName")).sendKeys("username");
webDriver.findElement(By.id("TANGRAM__PSP_10__password")).sendKeys("password");
webDriver.findElement(By.id("TANGRAM__PSP_10__verifyCode")).sendKeys("验证码");
webDriver.findElement(By.id("TANGRAM__PSP_10__submit")).click();
String username = webDriver.findElement(By.id("user-name")).getText();
if (username.contains("username")) {
System.out.print(true);
} else {
System.out.print(false);
}
webDriver.close();
}
} 优化一:代码结构:将测试业务代码和webdriver配置代码分离
import java.io.File;
import java.io.IOException;
import java.util.concurrent.TimeUnit;
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;
import org.testng.annotations.AfterMethod;
import org.testng.annotations.BeforeMethod;
import org.testng.annotations.Test;
public class SeleniumTest1 {
WebDriver webDriver;
@BeforeMethod
public void beforMethod() throws IOException {
// 业务无关,启动配置相关代码
String driverPath = new File("./").getCanonicalPath() + "/src/main/resources/driver/chromedriver.exe";
System.setProperty("webdriver.chrome.driver", driverPath);
webDriver = new ChromeDriver();
webDriver.manage().timeouts().implicitlyWait(20, TimeUnit.SECONDS);
}
@Test
public void test() {
webDriver.get("https://www.baidu.com/");
webDriver.manage().window().maximize();
webDriver.findElement(By.xpath("//*[@id='u1']/a")).click();
webDriver.findElement(By.id("TANGRAM__PSP_10__userName")).sendKeys("username");
webDriver.findElement(By.id("TANGRAM__PSP_10__password")).sendKeys("password");
webDriver.findElement(By.id("TANGRAM__PSP_10__verifyCode")).sendKeys("验证码");
webDriver.findElement(By.id("TANGRAM__PSP_10__submit")).click();
String username = webDriver.findElement(By.id("user-name")).getText();
if (username.contains("username")) {
System.out.print(true);
} else {
System.out.print(false);
}
}
@AfterMethod
public void afterMethod() {
// 业务无关代码
webDriver.quit();
}
}
:victory:
页:
[1]