selenium+testng自动化框架

2018-07-31  本文已影响73人  寻叶亭

前提条件:
1.安装maven
2.eclipse中新建一个maven项目

image.png image.png

3.引入外部依赖,直接在pom.xml文件中添加即可,比如引入testng(用来断言),在http://mvnrepository.com中搜索testng

image.png

然后选择版本后点击

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"

image.png

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.png

10.找不到页面元素时报错,打印未找到的对象并截图

image.png
上一篇下一篇

猜你喜欢

热点阅读