我们知道,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. 分布式监控系统开发【day37】:服务端生成配置数据(四)

    一.目录结构 二.引子与代码 1.客户端获取服务列表接口 1.解决了什么问题 客户端要给我获取服务列表的的时候,他肯定要告诉他是谁?他怎么告诉我,客户端必须有一个id号 Saltsack你装一个客户端 ...

  2. Java Web之Cookie、Session

    讲Cookie和Seesion之前,先讲一下HTTP连接其实是无序的,服务器不知道是谁在访问它.现在我们来实现一个简单的邮箱功能. 要求: 1.登录页面登录之后看到收件箱和欢迎我 2.点击收件箱看到几 ...

  3. 关于微信登录授权获取unionid的方法

    前言:微信登录授权是目前普遍存在于小程序的,还有一种静默授权方式是微信提供的但是不推荐使用,由于不同设备登录openid是不同的那么我们应该怎样拿到一个唯一的ID呢,下面做分享 wxml代码 < ...

  4. ArcMap修改粘滞移动容差防止要素在选择时无意拖动移动

    粘滞移动容差将设置一个最小像素数,鼠标指针必须在屏幕上移动了此最小距离时,所选要素才会实际发生移动. 设置粘滞移动容差的结果是延迟移动所选要素,直到指针至少移动了这段距离.此方法可用于在使用“编辑”工 ...

  5. Form -- 文件上传

    当我们选中文件,点击上传时即可. 而此按钮一般是一张图片覆盖了一个input标签而以.基于这个原理我们可以定制自己喜欢的样式 <div style="text-align: cente ...

  6. [物理学与PDEs]第5章习题5 超弹性材料中客观性假设的贮能函数表达

    设超弹性材料的贮能函数 $\hat W$ 满足 (4. 19) 式, 证明由它决定的 Cauchy 应力张量 ${\bf T}$ 满足各向同性假设 (4. 7) 式. 证明: 若贮能函数 $W$ 满足 ...

  7. 常见的游戏AI技术对比(FSM,HFSM,BT,GOAP,HTN,Utilitay,机器学习)

    最近研究的内容,比较懒还没写文章,先占个坑,过几天补

  8. wget无法正确下载jdk解决方案

    1 去官网复制下载链接 https://download.oracle.com/otn-pub/java/jdk/8u201-b09/42970487e3af4f5aa5bca3f542482c60/ ...

  9. springMVC中controller的几种返回类型

    ==网文1,还不错,感觉比较老旧springMVC中controller的几种返回类型 - CSDN博客http://blog.csdn.net/qq_16071145/article/details ...

  10. javascript基础 之 代码规范

    1,变量名 1,变量名推荐使用小驼峰写法:类似于:firstName 2,全局变量和常量建议用大写:PI 3,支持下划线 2,缩进 1,一般使用4个空格当作缩进,tab建议少用 2,运算符左右和左花括 ...