《手把手教你》系列基础篇(九十六)-java+selenium自动化测试-框架之设计篇-跨浏览器(详解教程)

博客 分享
0 238
张三
张三 2022-04-29 08:58:34
悬赏:0 积分 收藏

《手把手教你》系列基础篇(九十六)-java+ selenium自动化测试-框架之设计篇-跨浏览器(详解教程)

1.简介

从这一篇开始介绍和分享Java+Selenium+POM的简单自动化测试框架设计。第一个设计点,就是支持跨浏览器测试。

宏哥自己认为的支持跨浏览器测试就是:同一个测试用例,支持用不同浏览器去执行。我们这里只考虑Windows平台的浏览器,而且只关注火狐和谷歌浏览器的自动化测试,我们已经知道IE执行很慢,而且容易出问题,而且现在Windows系统也在逐步取消IE浏览器。

那到底要怎么做,才能支持一个自动化用例能够在不同浏览器上运行?宏哥这里是通过读取配置文件的值,来切换不同浏览器运行测试脚本。

2.实现思路

1.写一个配置文件,例如:xml、ini或则properties文件,里面写好浏览器的类型和测试(正式)服务器的地址或者域名,方便切换。

2.编写一个浏览器引擎类,通过读取配置文件加上if语句去控制启动不同浏览器。

3.测试脚本调用浏览器引擎类实例,得到driver,开始测试自动化脚本。

4.利用TestNG编写一个测试类文件,测试切换不同浏览器是否脚本运行成功。

3.项目实战

在上一篇文章基础上继续完善测试框架,按照实现思路具体步骤如下:

3.1代码设计

1.新建一个存放配置文件的文件夹TestConfig,以后相应的配置文件都放在里边,宏哥这里按照思路新建了一个config.properties的配置文件,如下图所示:

2.在framework包下,新建一个浏览器的引擎类:BrowserEngine,如下图所示:

3.在testSuite新建一个测试类:TestLaunchBrowser,如下图所示:

3.2参考代码

(1)config.properties

# browser switcher#browserName = FirefoxbrowserName = Chrome#browserName = IE# test server switcherURL=https://www.jd.com#URL=https://taobao.com

(2)BrowserEngine.java

package framework;import java.io.FileInputStream;import java.io.IOException;import java.io.InputStream;import java.util.Properties;import java.util.Set;import java.util.concurrent.TimeUnit; import org.openqa.selenium.WebDriver;import org.openqa.selenium.chrome.ChromeDriver;import org.openqa.selenium.firefox.FirefoxOptions;import org.openqa.selenium.firefox.FirefoxProfile;import org.openqa.selenium.ie.InternetExplorerDriver;/** * @author 北京-宏哥 *  * @公众号:北京宏哥 *  *  《手把手教你》系列基础篇(九十六)-java+ selenium自动化测试-框架之设计篇-跨浏览器(详解教程) * * 2022年4月02日 */public class BrowserEngine {        public String browserName;    public String serverURL;    public WebDriver driver;        public void initConfigData() throws IOException{                Properties p = new Properties();        // 加载配置文件        InputStream ips = new FileInputStream(".\\TestConfig\\config.properties");        p.load(ips);                Logger.Output(LogType.LogTypeName.INFO, "Start to select browser name from properties file");        browserName=p.getProperty("browserName");        Logger.Output(LogType.LogTypeName.INFO, "Your had select test browser type is: "+ browserName);        serverURL = p.getProperty("URL");        Logger.Output(LogType.LogTypeName.INFO, "The test server URL is: "+ serverURL);        ips.close();            }        public WebDriver getBrowser(){                if(browserName.equalsIgnoreCase("Firefox")){                        System.setProperty("webdriver.gecko.driver", ".\\Tools\\geckodriver.exe");                driver = createFireFoxDriver();                        Logger.Output(LogType.LogTypeName.INFO, "Launching Firefox ...");                    }else if(browserName.equalsIgnoreCase("Chrome")){                        System.setProperty("webdriver.chrome.driver", ".\\Tools\\chromedriver.exe");            driver= new ChromeDriver();            Logger.Output(LogType.LogTypeName.INFO, "Launching Chrome ...");                    }else if(browserName.equalsIgnoreCase("IE")){                        System.setProperty("webdriver.ie.driver", ".\\Tools\\IEDriverServer.exe");            driver= new InternetExplorerDriver();            Logger.Output(LogType.LogTypeName.INFO, "Launching IE ...");        }                driver.get(serverURL);        Logger.Output(LogType.LogTypeName.INFO, "Open URL: "+ serverURL);        driver.manage().window().maximize();        Logger.Output(LogType.LogTypeName.INFO, "Maximize browser...");        callWait(5);        return driver;    }        /*     * 关闭浏览器并退出方法     */        public void tearDown() throws InterruptedException{                Logger.Output(LogType.LogTypeName.INFO, "Closing browser...");        Thread.sleep(3000);            driver.quit();    }        /*     * 隐式时间等待方法     */    public void callWait(int time){                driver.manage().timeouts().implicitlyWait(time, TimeUnit.SECONDS);        Logger.Output(LogType.LogTypeName.INFO, "Wait for "+time+" seconds.");    }            /*     * createFireFox Driver     * @Param: null     * @return: WebDriver     */        private WebDriver createFireFoxDriver() {                WebDriver driver = null;        FirefoxProfile firefoxProfile = new FirefoxProfile();         firefoxProfile.setPreference("prefs.converted-to-utf8", true);        //set download folder to default folder: TestDownload        firefoxProfile.setPreference("browser.download.folderList", 2);        firefoxProfile.setPreference("browser.download.dir", ".\\TestDownload");                try {            // 旧版本的写法,新版本用下边的这个会报错:The constructor FirefoxDriver(FirefoxProfile) is undefined            //driver = new FirefoxDriver(firefoxProfile);             FirefoxOptions firefoxOptions = new FirefoxOptions();             firefoxOptions.setProfile(firefoxProfile);         } catch (Exception e) {            Logger.Output(LogType.LogTypeName.ERROR, e.getMessage());            Logger.Output(LogType.LogTypeName.ERROR, "Failed to initilize the Firefox driver");        }        return driver;    }     }

(3)TestLaunchBrowser.java

package testSuite;import java.io.IOException;import org.openqa.selenium.By;import org.openqa.selenium.WebDriver;import org.testng.annotations.AfterClass;import org.testng.annotations.BeforeClass;import org.testng.annotations.Test; import framework.BrowserEngine;/** * @author 北京-宏哥 *  * @公众号:北京宏哥 *  *  《手把手教你》系列基础篇(九十六)-java+ selenium自动化测试-框架之设计篇-跨浏览器(详解教程) * * 2022年4月02日 */public class TestLaunchBrowser {        public WebDriver driver;        @BeforeClass    public void setUp() throws IOException{                BrowserEngine browserEngine = new BrowserEngine();        browserEngine.initConfigData();        driver=browserEngine.getBrowser();            }            @Test    public void searchPhone(){                driver.findElement(By.id("key")).sendKeys("iPhone");        driver.findElement(By.xpath("//*[@id='search']/div/div[2]/button")).click();            }        @AfterClass    public void tearDown() throws InterruptedException{                Thread.sleep(5000);        driver.quit();//        BrowserEngine browserEngine = new BrowserEngine();//        browserEngine.tearDown();            }}

3.3运行代码

1.运行代码,右键Run AS->Java Appliance,控制台输出,如下图所示:

2.运行代码后电脑端的浏览器的动作,如下小视频所示:

 

4.小结

 好了,今天时间不早了,今天宏哥就分享和讲解到这里,感谢您耐心地阅读!

posted @ 2022-04-29 08:50 北京-宏哥 阅读(0) 评论(0) 编辑 收藏 举报
回帖
    张三

    张三 (王者 段位)

    821 积分 (2)粉丝 (41)源码

     

    温馨提示

    亦奇源码

    最新会员