我们知道,web 测试的时候是需要切换不同的浏览器以查看每个功能在不同浏览器上的运行情况,使得开发的程序更具有健壮性。本文先总结一下如何通过读取配置文件来切换浏览器。

具体步骤如下:

一、编写配置文件,写好浏览器的类型和测试的服务器的地址,方便切换。本文以火狐、谷歌、IE为例。(先注释掉谷歌和IE,需要测试的时候再注释回来)

二、编写引擎类,配置文件写好了之后就是编写一个浏览器引擎类,通过条件语句来读取配置文件以便控制启动不同的浏览器。

package first;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.Properties;
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.FirefoxProfile;
import org.openqa.selenium.ie.InternetExplorerDriver;
 
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\\configure2.properties");
        p.load(ips);
        
        //纯Java方法输出日志
        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")){
            
            driver = createFireFoxDriver();
            
            Logger.Output(LogType.LogTypeName.INFO, "Launching Firefox ...");
            
        }else if(browserName.equalsIgnoreCase("Chrome")){
            
            driver= new ChromeDriver();
            Logger.Output(LogType.LogTypeName.INFO, "Launching Chrome ...");
            
        }else if(browserName.equalsIgnoreCase("IE")){
            
            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...");
        driver.quit();
        Thread.sleep(3000);
    }
    
    // 隐式时间等待方法
    
    public void callWait(int time){
        driver.manage().timeouts().implicitlyWait(time, TimeUnit.SECONDS);
        Logger.Output(LogType.LogTypeName.INFO, "Wait for "+time+" seconds.");
    }

private WebDriver createFireFoxDriver() {
        WebDriver driver = null;
        FirefoxProfile firefoxProfile = new FirefoxProfile();
 
        firefoxProfile.setPreference("prefs.converted-to-utf8", true);
        
        firefoxProfile.setPreference("browser.download.folderList", 2);
        firefoxProfile.setPreference("browser.download.dir", ".\\TestDownload");
        
        try {
                driver = new FirefoxDriver();
        } catch (Exception e) {
            Logger.Output(LogType.LogTypeName.ERROR, e.getMessage());
            Logger.Output(LogType.LogTypeName.ERROR, "Failed to initilize the Firefox driver");
        }
        return driver;
    }
}

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

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

package Test;
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 first.BrowserEngine;
 
public class TestLaunchBrowser {
    
    public WebDriver driver;
    
    @BeforeClass
    public void setUp() throws IOException{
        
        BrowserEngine browserEngine = new BrowserEngine();
        browserEngine.initConfigData();
        driver=browserEngine.getBrowser();
        
    }
    
    
    @Test
    public void clickNews() throws InterruptedException{
        
        driver.findElement(By.id("key")).sendKeys("iPhone 7");
        driver.findElement(By.xpath("//*[@id='search']/div/div[2]/button")).click();
        Thread.sleep(2000);
        
    }
    
    @AfterClass
    public void tearDown(){
        
        driver.quit();
    }
 
 
}

注意:这里要强调的就是setUp方法中,如何获取浏览器driver这个实例对象并赋值给当前测试脚本中定义的driver,这个一定要理解好。一句话解释就是,你在浏览器引擎类定义了一个driver对象,在测试脚本中又定义了一个driver对象,你需要保持整个测试过程,只有一个唯一的driver,否则会报错,测试脚本不会执行查找元素和点击事件。

selenium3+java+POM 跨浏览器测试之------读取配置文件的更多相关文章

  1. java web路径和spring读取配置文件

    此篇博客缘起:部署java web系统到阿里云服务器(ubuntu14.04)的时候,有以下两个问题 找不到自定义的property配置文件 上传图片的时候找不到路径 开发的时候是在windows上的 ...

  2. Java基于ClassLoder/ InputStream 配合读取配置文件

    阅读java开源框架源码或者自己开发系统时配置文件是一个不能忽略的,在阅读开源代码的过程中尝尝困惑配置文件是如何被读取到内存中的.配置文件本身只是为系统运行提供参数的支持,个人阅读源码时重点不大可能放 ...

  3. python接口测试之读取配置文件

    1.python使用自带的configparser模块用来读取配置文件,配置文件可以为.conf或.ini结尾 在使用前需要先安装该模块,使用pip安装即可 2.新建一个名为a.conf的配置文件 a ...

  4. Java从resources文件夹读取配置文件

    列举了2种方式,第一种是绝对路径,就是写死路径,不推荐 第二种是相对路径,使用到了ClassLoader package com.StadyJava.day22; import java.io.Fil ...

  5. java读取配置文件的推荐方法getResource、getResourceAsStream

    在java开发中经常会读取配置文件,如果把文件路径写死,就太LOW了,也不符合编码规范. 在网上找了一些资料后,发现有两种方法:xxx.class.getResource("")  ...

  6. ResourceBundle与Properties读取配置文件

    ResourceBundle与Properties的区别在于ResourceBundle通常是用于国际化的属性配置文件读取,Properties则是一般的属性配置文件读取. ResourceBundl ...

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

    1.简介 从这一篇开始介绍和分享Java+Selenium+POM的简单自动化测试框架设计.第一个设计点,就是支持跨浏览器测试. 宏哥自己认为的支持跨浏览器测试就是:同一个测试用例,支持用不同浏览器去 ...

  8. spring boot使用java读取配置文件,DateSource测试,BomCP测试,AnnotationConfigApplicationContext的DataSource注入

    一.配置注解读取配置文件         (1)@PropertySource可以指定读取的配置文件,通过@Value注解获取值   实例:           @PropertySource(val ...

  9. IT咨询顾问:一次吐血的项目救火 java或判断优化小技巧 asp.net core Session的测试使用心得 【.NET架构】BIM软件架构02:Web管控平台后台架构 NetCore入门篇:(十一)NetCore项目读取配置文件appsettings.json 使用LINQ生成Where的SQL语句 js_jquery_创建cookie有效期问题_时区问题

    IT咨询顾问:一次吐血的项目救火   年后的一个合作公司上线了一个子业务系统,对接公司内部的单点系统.我收到该公司的技术咨询:项目启动后没有规律的突然无法登录了,重新启动后,登录一断时间后又无法重新登 ...

随机推荐

  1. go 的匿名函数和闭包

    匿名函数 匿名函数是指不需要定义函数名的一种函数实现方式. 在Go语言中,函数可以像普通变量一样被传递或使用,这与C语言的回调函数比较类似.不同的是,Go语言支持随时在代码里定义匿名函数. 匿名函数由 ...

  2. Python list和 np.Array 的转换关系

    一.List转String 1.str list转 string a_list = ["h","e","l","l",& ...

  3. Ubuntu设置和查看环境变量

    设置环境变量的三种方法 1.1 临时设置 export PATH=/home/yan/share/usr/local/arm/3.4.1/bin:$PATH 1.2 当前用户的全局设置 打开~/.ba ...

  4. scala使用slick查询的全过程(使用cass class)

    1. 首先导包 <dependency> <groupId>com.typesafe.slick</groupId> <artifactId>slick ...

  5. jS处理中英文时间格式化问题

    // datebox里面日期格式化,i18nStr是当前国际化的日期格式,fdate是需要处理的时间,默认为当前时间 function formatDate(i18nStr,fdate) { var ...

  6. 🍓JavaScript 对象原型链继承的弊端 🍓

  7. smartgit

    1.同步最新分支 2.smartgit ctrl+2 可以看到本地新增加的文件

  8. flask 搭建ssl接口

    from flask import Flask,jsonifyapp = Flask(__name__)#app.config['SERVER_NAME'] = 'example.com' @app. ...

  9. 题解-HNOI2017 抛硬币

    Problem loj2023 题意概述:甲抛掷 \(a\) 次硬币,乙抛掷 \(b\) 次硬币,问有多少种情况甲正面向上的次数比乙多,答案对 \(10^k\) 取模 对于 \(10\%\) 的数据, ...

  10. 如何开启远程debug调试功能?

    远程debug步骤: 1.vi /usr/local/sa/tomcat-ui/bin/catalina.sh 最顶上加export JPDA_ADDRESS=12345 2.vi /usr/loca ...