selenium+testng自动化框架
2018-07-31 本文已影响73人
寻叶亭
前提条件:
1.安装maven
2.eclipse中新建一个maven项目
3.引入外部依赖,直接在pom.xml文件中添加即可,比如引入testng(用来断言),在http://mvnrepository.com中搜索testng
然后选择版本后点击
image.png直接copy
image.png然后如下图所示加到pom.xml中
image.png
同样方法依次引入selenium(操作页面元素用)、log4j(打印日志用)、commons(截图用)
image.png
4.在eclipse中新建一个基类,封装一个找页面元素的方法
public class BasicPO {
public WebDriver driver;
public static String url;
public static long globaltime = 1;
long filename = System.currentTimeMillis();//获取当前时间,用以截图命名
public org.apache.logging.log4j.Logger logger = LogManager.getLogger(ResolverUtil.Test.class.getName());
public WebElement findelement(By by,long timeout){
try {
//显示等待,找到元素了立马执行,未找到等待几秒后抛出异常
WebElement element = new WebDriverWait(driver, timeout).until(ExpectedConditions.presenceOfElementLocated(by));
//找到元素了打印info日志
logger.info("|"+this.getClass().getName()+by.toString()+"对象被访问"+filename);
return (element);
} catch (Exception e) {
Commond.shotscreen(driver, filename);//截图
//打印error日志,且将截图地址输出
logger.error("|"+this.getClass().getName()+by.toString()+"对象无法找到"+filename);
return(null);
}
}
public WebElement findelement(By by){//重载,若未指定等待时间则给默认时间
try {
WebElement element = new WebDriverWait(driver, globaltime).until(ExpectedConditions.presenceOfElementLocated(by));
logger.info("|"+this.getClass().getName()+by.toString()+"对象被访问"+filename);
return (element);
} catch (Exception e) {
Commond.shotscreen(driver, filename);
logger.error("|"+this.getClass().getName()+by.toString()+"对象无法找到 | 截图文件:"+filename);
return(null);
}
}
}
5.对百度搜索页面操作进行封装
public class BaiduSearchPO extends BasicPO {
public static By baidusearchinput = By.id("kw");
public static By baidusearchbutton = By.id("su");
public BaiduSearchPO(WebDriver driver) {
this.driver = driver;
String url = "http://www.baidu.com";
driver.navigate().to(url);
}
public void baidusearch(String searchstring) throws InterruptedException {
this.findelement(baidusearchinput).sendKeys(searchstring);
this.findelement(baidusearchbutton).click();
Thread.sleep(3000);
driver.quit();
}
}
6.接着实现截图方法:
public class Commond {
public static void shotscreen(WebDriver driver,Long filename) throws IOException {
File screenshotfile = ((TakesScreenshot)driver).getScreenshotAs(OutputType.FILE);
FileUtils.copyFile(screenshotfile, new File("d:/log/screen/"+filename+".png"));
}
}
7.在Eclipse中在线安装TestNG插件
打开Eclipse Help ->Install from Site, 然后Add "http://beust.com/eclipse"
8.最后就是写用例部分了,新建一个testngclass 其中BeforeMethod、Test和AfterMethod是testng的注解,分别代表初始化、执行主体和结尾
public class BaiduTest {
@BeforeMethod
public void setup(){
}
WebDriver wd = new ChromeDriver();
@Test
public void f() throws InterruptedException
{
BaiduSearchPO baiduSearchPO = new BaiduSearchPO(wd);
baiduSearchPO.baidusearch("www");
String actual = wd.findElement(By.xpath("//*[@id=\"1\"]/div[1]/div[2]/p[1]/text()[1]")).getText();
System.out.println(actual);
Assert.assertTrue(actual.contains("www"));
}
@AfterMethod
public void teardown(){
wd.quit();
}
}
9.正常访问到页面元素时打印访问对象名称
image.png10.找不到页面元素时报错,打印未找到的对象并截图
image.png