《手把手教你》系列基础篇(九十六)

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 = Firefox browserName = Chrome #browserName = IE  # test server switcher URL=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.小结

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

商匡云商
Logo
注册新帐户
对比商品
  • 合计 (0)
对比
0
购物车