基于Selenium的Web UI自动化实现(java)
做了一段时间的自动化,现在整理出了一些个人的见解,后续计划照着这个步骤进行深入学习。
首先我认为,一个较完善的自动化项目,需要考虑以下问题:
1)测试用例的存放与读取
2)对浏览器的各种操作
3)如何定位元素与执行用例
4)如何判断执行结果是否正确(断言)
5)在执行过程中打印日志
6)执行完成后生成报告
我写了一个小项目,实现了上面的2和3这两步。这个项目所完成的功能就是“打开百度,搜索12306”。具体实现过程如下
一、创建项目
在 eclipse 中新建项目取名为 WebUIAuto,新建了几个 package:
- main
存放实现自动化过程的 java 代码 - test
存放执行测试的 test 类 - resource
存放一些资源及配置文件 - utils
存放一些常用的工具类
二、新建配置文件
为了方便后期的维护,我将一些可能随时修改的东西放进了配置文件中,比如使用的浏览器、需要访问的地址等。
在 resource 文件夹下新建 input.properties 文件,记录我们需要用到的浏览器与地址,如下:
注意在这个 properties 文件中,“=”后面最好不要留空格,否则在打开 url 时可能报错。
三、读取配置文件
在 utils 文件夹下新建 Config 类,用来读取配置文件中的配置。代码如下:
public class Config {
public static Properties getProperties(){
InputStream inputStream = null;
inputStream = Config.class.getResourceAsStream("/resource/input.properties");
Properties properties = new Properties();
try {
properties.load(inputStream);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return properties;
}
}
四、实现浏览器的操作
在 main 文件夹下新建 Browser 类,实现浏览器操作的各种方法。代码如下:
public class Browser {
public WebDriver webDriver;
/**
* 初始化webdriver,打开地址
* @param url
* @return
*/
public WebDriver openUrl(String url){
Properties properties = Config.getProperties();
String browser = properties.getProperty("browser");
switch(browser){
case "firefox":
System.setProperty("webdriver.gecko.driver", "D:\\Firefox\\geckodriver.exe");
webDriver = new FirefoxDriver();
break;
case "ie":
System.setProperty("webdriver.id.driver", "");
webDriver = new InternetExplorerDriver();
break;
default:
System.setProperty("webdriver.chrome.driver", "D:\\Chrome\\chromedriver.exe");
webDriver = new ChromeDriver();
break;
}
webDriver.get(url);
webDriver.manage().window().maximize();
return webDriver;
}
/**
* 退出浏览器
*/
public void close(){
try{
//延迟两秒关闭浏览器
Thread.sleep(2000);
webDriver.close();
}catch (Exception e) {
// TODO: handle exception
}
}
}
这里需要去网上下载一些东西:
- selenium webdriver 对应的 jar 包
添加方式为右键点击项目 -> properties -> Java Build Path,如图
- 下载浏览器对应的驱动
firefox — geckodriver.exe
chrome — chromedriver.exe
注意驱动的版本要和浏览器版本对应
五、编写实现操作的方法
打开浏览器后,我们要实现的方法有两个,一是向输入框中输入要查找的内容,二是点击搜索按钮。这两个方法是在同一个页面上进行操作的,所以我们将页面作为对象,在 main 下面新建 SearchPage 类。代码如下:
public class SearchPage {
/**
* 输入内容
* @param driver
* @param keyword
*/
public void input(WebDriver driver,String keyword){
driver.findElement(By.id("kw")).sendKeys(keyword);
}
/**
* 点击搜索按钮
* @param driver
*/
public void search(WebDriver driver){
driver.findElement(By.id("su")).click();
}
}
其中,对页面的操作是通过 findElement By id 的方式来定位的,详细定位方式将在后面介绍。
六、填充数据,执行操作
浏览器和页面的操作都已经封装完成了,接下来就看是否能执行我们预期的操作,在 test 文件夹下新建 TestSearch 类,代码如下:
public class TestSearch {
@Test
public void testSearch(){
Browser browser = new Browser();
Properties properties = Config.getProperties();
WebDriver driver = browser.openUrl(properties.getProperty("url"));
SearchPage search = new SearchPage();
search.input(driver, "12306");
search.search(driver);
driver.close();
}
}
我们采用 TestNG 来执行测试,注意对应的包是
org.testng.annotations.Test;
不要导成了 JUnit 下面的 TestNG
右键点击项目或 TestSearch 类 -> Run As -> TestNG Test,可以看到项目成功运行。
扫码关注微信公众号