zoukankan      html  css  js  c++  java
  • 基于Java+Selenium的WebUI自动化测试框架(六)---浏览器初始化

      本篇我们来讨论,如何写一个浏览器初始化的类。在写之前,先思考一下,我们需要一个什么样的初始化?

      先来看看使用原生的Java + selenium是怎么做的。(以firefox为例)

            System.setProperty("webdriver.gecko.driver", "c:\geckodriver.exe");
            driver = new FirefoxDriver();

      上面是个典型的例子,System.setProperty("webdriver驱动名",“webdriver的路径”),然后去new一个新的driver对象。这里引出一个问题,即webdriver的版本问题。

          先贴两张图,后续可以继续更新维护。

    ChromeDriver的

    下载地址(国内淘宝镜像):https://npm.taobao.org/mirrors/chromedriver

    firefox-geckodriver的

    下载路径:https://github.com/mozilla/geckodriver/releases

    再放一个参考网址:http://selenium-release.storage.googleapis.com/index.html

           总之,我们在构建Selenium+WebDriver这套环境的时候,需要注意Selenium,WebDriver以及浏览器版本之间的对应关系。笔者自己使用的组合:

    selenium-server-standalone-3.9.1

    chrome浏览器 版本 76.0.3809.132(正式版本)  ------->不小心升级了。。。。chromedriver版本 76.0.3809.126

    firefox浏览器 63.0.1  ------->geckodriver 版本 0.24.0

    PS:Chorme浏览器在70版本之后,所使用的chomedriver与浏览器版本尽量保持一致。

          好了,说完浏览器与WebDriver时间的版本对应,我们就要来着手开始写浏览器初始化的代码了。

          在黑盒手工测试中,我们经常说“启动XX浏览器输入XXX网址并打开”,那么浏览器初始化,我们就基本定义2个参数。一个是XX浏览器,一个XXX是网址。

    package webui.xUtils;
    
    import java.util.concurrent.TimeUnit;
    
    import org.openqa.selenium.WebDriver;
    import org.openqa.selenium.chrome.ChromeDriver;
    import org.openqa.selenium.firefox.FirefoxDriver;
    import org.openqa.selenium.firefox.FirefoxOptions;
    import org.openqa.selenium.firefox.FirefoxProfile;
    import org.openqa.selenium.ie.InternetExplorerDriver;
    import org.openqa.selenium.remote.DesiredCapabilities;
    import org.testng.Reporter;
    
    public class browserUtil {
        static WebDriver driver;
        static logUtil logs = new logUtil(browserUtil.class);
        @SuppressWarnings("deprecation")
        public static WebDriver setDriver(String browserName,String url) {
            logs.info("读取执行xml配置的"+browserName+"浏览器初始化
    ");
            Reporter.log("读取执行xml配置的"+browserName+"浏览器初始化
    ");
            switch (browserName) {
            case "firefox":
                //此处设置firefox的webdriver地址
                System.setProperty("webdriver.gecko.driver", ".\libs\webdriver\geckodriver.exe");
                FirefoxProfile profile = new FirefoxProfile();
                //设置成 0 代表下载到浏览器默认下载路径, 设置成 2 则可以保存到指定目录。
                profile.setPreference("browser.download.folderList", 2);
                profile.setPreference("browser.download.dir", ".\firefox-download");
                //browser.helperApps.neverAsk.saveToDisk
                //指定要下载页面的 Content-type 值, “binary/octet-stream” 为文件的类型。
                //下载的文件不同,这里的类型也会有所不一样。如果不清楚你下载的文件什么类型,请用Fiddler抓包。
                profile.setPreference("browser.helperApps.neverAsk.saveToDisk", "application/vnd.ms-excel");
                profile.setPreference("plugin.state.flash", 2);
                FirefoxOptions options = new FirefoxOptions();
                options.setProfile(profile);
                driver = new FirefoxDriver(options);
                driver.manage().window().maximize();
                //隐式等待
    //            driver.manage().timeouts().implicitlyWait(30, TimeUnit.SECONDS);
                logs.info("打开浏览器,访问"+url+"网址!");
                Reporter.log("打开浏览器,访问"+url+"网址!");
                driver.get(url);
                break;
            case "chrome":
                System.setProperty("webdriver.chrome.driver", ".\libs\webdriver\chromedriver.exe");
                driver = new ChromeDriver();
                driver.manage().window().maximize();
                driver.manage().timeouts().implicitlyWait(30, TimeUnit.SECONDS);
                logs.info("打开浏览器,访问"+url+"网址!");
                Reporter.log("打开浏览器,访问"+url+"网址!");
                driver.get(url);
                break;
            case "IE":
                System.setProperty("webdriver.ie.driver", ".\libs\webdriver\IEDriverServer32.exe");
                DesiredCapabilities dc = DesiredCapabilities.internetExplorer();
                dc.setCapability(InternetExplorerDriver.INTRODUCE_FLAKINESS_BY_IGNORING_SECURITY_DOMAINS, true);
                dc.setCapability("ignoreProtectedModeSettings", true);
                driver=new InternetExplorerDriver(dc);
                driver.manage().window().maximize();
                driver.manage().timeouts().implicitlyWait(30, TimeUnit.SECONDS);
                logs.info("打开浏览器,访问"+url+"网址!");
                Reporter.log("打开浏览器,访问"+url+"网址!");
                driver.get(url);
                break;
            default:
                break;
            }
            return driver;
        }
        
        public static void quit() {
            driver.quit();
        }
    }

         在这里说两个问题。一个是有关于文件的下载,另外一个是关于IE浏览器的设置问题。

         当我们在使用Selenium运行自动化测试时,偶尔需要用到下载功能。但浏览器的下载可能会弹出下载窗口,或者下载路径不是我们想要保存的位置,所以在通过Selenium启动浏览器时需要做相关的设置,将使这些设置在启动的浏览器中生效果。
         

       针对Firefox浏览器,我们可以参考一下的思路来进行设置。(请参考前面的红色部分代码)

       先 new 一个FirefoxProfile()类,通过setPreference 设置浏览器下载类型、路径等。

    参数:
         browser.download.folderList
         设置成 0 代表下载到浏览器默认下载路径, 设置成 2 则可以保存到指定目录。
         browser.download.dir
         用于指定所下载文件的目录。
         browser.helperApps.neverAsk.saveToDisk
         指定要下载页面的 Content-type 值, “binary/octet-stream” 为文件的类型。下载的文件不同,这里的类型也会有所不一样。如果不清楚下载的文件什么类型,请使用Fiddler抓包查看。

       针对chrome浏览器,我们可以采用类似的思路。可以参考以下的代码段:

            String downloadFilepath = "D:\java";
            HashMap<String, Object> chromePrefs = new HashMap<String, Object>();
            chromePrefs.put("profile.default_content_settings.popups", 0);
            chromePrefs.put("download.default_directory", downloadFilepath);
            ChromeOptions options = new ChromeOptions();
            HashMap<String, Object> chromeOptionsMap = new HashMap<String, Object>();
            options.setExperimentalOption("prefs",chromePrefs);
            options.addArguments("--test-type");
            DesiredCapabilities cap = DesiredCapabilities.chrome();
            cap.setCapability(ChromeOptions.CAPABILITY, chromeOptionsMap);
            cap.setCapability(CapabilityType.ACCEPT_SSL_CERTS, true);
            cap.setCapability(ChromeOptions.CAPABILITY, options);
            
            WebDriver driver = new ChromeDriver(cap);
    
            driver.get(url);

    参数说明:

           相比较Firefox来说,Chrome的下载默认不会弹出下载窗口的,我们主要是想修改默认的默认下载路径。
           Chrome的设置看上去要比Firefox复杂一次,不过,你需要关注两个设置:
                profile.default_content_settings.popups 0 设置为禁止弹出下载窗口
                download.default_directory 设置为文件下载路径

    下一篇我们来继续关注IE浏览器的设置。

  • 相关阅读:
    在X++中使用IoC/DI模式应对不断变化的客户需求
    Predicate<T>与Func<T, bool>泛型委托
    Windows Live Writer插件:在WLW中插入语法高亮代码
    学习C#和.NET的资源
    C#中事件的动态调用
    2008年全国软件工程大会论文集
    C#基础:接口(二)
    【转载】"变化"、"复用"、"抽象"、"稳定" 影响着软件设计模式,架构,开发方法
    【领域驱动设计】.NET实践:实体、值对象和数据传输对象
    RSS订阅之基本使用
  • 原文地址:https://www.cnblogs.com/generalli2019/p/11419952.html
Copyright © 2011-2022 走看看