Selenium 的基础框架类

简介:

个人写的一个selenium的base类,应该所有使用selenium的同事都会使用到:

package com.hx.baserunner;

import static java.io.File.separator;

import java.io.File;
import java.io.FileInputStream;
import java.net.MalformedURLException;
import java.net.URI;
import java.net.URISyntaxException;
import java.net.URL;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Map;
import java.util.Properties;
import java.util.concurrent.TimeUnit;

import org.apache.commons.io.FileUtils;
import org.apache.log4j.Logger;
import org.openqa.selenium.Capabilities;
import org.openqa.selenium.OutputType;
import org.openqa.selenium.Proxy;
import org.openqa.selenium.TakesScreenshot;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebDriverException;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.firefox.FirefoxDriver;
import org.openqa.selenium.firefox.FirefoxProfile;
import org.openqa.selenium.ie.InternetExplorerDriver;
import org.openqa.selenium.remote.Augmenter;
import org.openqa.selenium.remote.CapabilityType;
import org.openqa.selenium.remote.DesiredCapabilities;
import org.openqa.selenium.remote.RemoteWebDriver;
import org.openqa.selenium.remote.UnreachableBrowserException;
import org.testng.ITestContext;
import org.testng.ITestResult;
import org.testng.Reporter;
import org.testng.annotations.AfterMethod;
import org.testng.annotations.BeforeSuite;
import org.testng.annotations.AfterSuite;
import org.testng.annotations.DataProvider;
import org.testng.annotations.Parameters;

import com.hx.dataproviders.ExcelDataProivderLoginSheet;
import com.hx.utility.HostUtil;

public class BaseSeleniumDriver {

  public  WebDriver driver=null;
  public String proxyserver, browser, hubUrl;
  private static final Logger log=Logger.getLogger(BaseSeleniumDriver.class);
  
  @BeforeSuite
  //@Parameters({ "excelpath"}) 
  public void beforeSuite() throws Exception{
//        Properties p = new Properties();
//        FileInputStream  conf = new FileInputStream(configfile);
//        p.load(conf);
      
       String excelpath=System.getProperty("user.dir")+"\\resources\\TestData.xls";
       log.debug("excel path is "+excelpath);
        String hostname=HostUtil.getFQDN();
        log.debug("the running host is :"+hostname);
        Map<String,String> mapdata=ExcelDataProivderLoginSheet.getSpecifySheet(excelpath,hostname);
//        hubUrl = p.getProperty("hubUrl");
    //    hubUrl="http://127.0.0.1:4444/wd/hub";
//        browser = p.getProperty("browser");
        browser=mapdata.get("Browser_Type").trim().toLowerCase();
     //   testUrl = p.getProperty("testUrl");
    //    log.info("The Page URL is:"+testUrl);
        proxyserver=mapdata.get("proxy_url").trim();
        log.debug("the browser type is :"+browser);
        log.debug("the remote run host hub is :"+hubUrl); 
        log.debug("the browser's proxy server is :"+proxyserver);
        
        DesiredCapabilities capability=new DesiredCapabilities();
        //common settings
        capability.setCapability("cssSelectorsEnabled", true);
        capability.setCapability("takesScreenshot", true);
        capability.setCapability("javascriptEnabled", true);
        capability.setCapability("ACCEPT_SSL_CERTS", true);
        capability.setBrowserName(browser);
        //proxy settings
//        if(!proxyserver.equals(""))
//        {
//            log.debug(" the current proxy is not null ,we will set the proxy server for this host,proxy server is :"+proxyserver);
        //    capability.setCapability(CapabilityType.PROXY, new Proxy().setHttpProxy(proxyserver));
        //    capability.setCapability(CapabilityType.PROXY, new Proxy().setNoProxy("localhost"));
//            log.debug("the proxy had been set correctly now ");
//        }
        
        //use different browser
        if (hubUrl == null || hubUrl.trim().isEmpty())
        {
            log.debug("the blow testing is for the local server testing");
            // if no hubUrl specified, run the tests on localhost
            if (browser == null || browser.trim().isEmpty()) {
                // if no browser specified, use IE
                //capability =DesiredCapabilities.internetExplorer();
                log.debug(" the browser we used is IE ");
                capability.setCapability(InternetExplorerDriver.INTRODUCE_FLAKINESS_BY_IGNORING_SECURITY_DOMAINS, true);
                capability.setCapability("ignoreProtectedModeSettings",true);
                capability.setCapability("enablePersistentHover", false);  //prevent frozen
                driver = new InternetExplorerDriver(capability);
                log.debug("Start the IE driver now ");
            } 
            else {
                if (browser.trim().equalsIgnoreCase("firefox")) {
                    FirefoxProfile p = new FirefoxProfile();
                    p.setPreference("webdriver.log.file", "log/firefox_startup.log");
                    driver = new FirefoxDriver(capability);
                    log.debug("Start the firefox driver now ");
                } else if (browser.trim().equalsIgnoreCase("chrome")) {
                    driver = new ChromeDriver(capability);
                    log.debug("start the chrome driver now ");
                } else {
                    driver = new InternetExplorerDriver(capability);
                    log.debug("start the IE driver now ");
                }
            }
        } 
        
        else {
            log.debug("we will run the remote host for the testing ");
        //    DesiredCapabilities capability=null;
        
            if (browser.toLowerCase().trim().equals("ie"))
            {
                //frozen windows 
                capability =DesiredCapabilities.internetExplorer();
                log.debug(" the browser we used is IE ");
                capability.setCapability(InternetExplorerDriver.INTRODUCE_FLAKINESS_BY_IGNORING_SECURITY_DOMAINS, true);
                capability.setCapability("ignoreProtectedModeSettings",true);
                capability.setCapability("enablePersistentHover", false);  //prevent frozen
                
            }
            else if(browser.toLowerCase().trim().equals("firefox"))
            {
                capability =DesiredCapabilities.firefox();
                log.debug("the browser we used is firefox");
                //if need the proxy                
            }
            else
            {
                capability =DesiredCapabilities.chrome();
                log.debug("the browser we used is none");            
            }
        
            //driver = new RemoteWebDriver(new URL(hubUrl), capability);
            driver = new RemoteWebDriver(capability);
            Capabilities actualCapabilities = ((RemoteWebDriver) driver).getCapabilities();
            
        }
        
        
        //the driver need to wait time 
        driver.manage().window().maximize();
        driver.manage().timeouts().implicitlyWait(30, TimeUnit.SECONDS);
  }
  @AfterMethod
  public void afterMethod(ITestResult result, ITestContext context) throws Exception {
      
      Throwable t = result.getThrowable();
        log.debug("the throwable object is :"+t);
        //if the testNG met error or exception
        if ((!result.isSuccess())||t instanceof WebDriverException || t instanceof AssertionError) {
            log.error("WebDriverException or Assert Exception");
            // get filename
            Calendar cal = Calendar.getInstance();
            SimpleDateFormat sf = new SimpleDateFormat("yyyy-MM-dd-HHmmss");
            // concat prefix with current time and return

            String filename = result.getTestClass().getName() + "."
                    + result.getMethod().getMethodName() + "."
                    + sf.format(cal.getTime()) + ".png";
            log.debug("we met the error ,we will generate a screenshot file for this error, file name is "+filename);
        //    WebDriver augmentedDriver = new Augmenter().augment(driver);
            File scrFile = ((TakesScreenshot) driver).getScreenshotAs(OutputType.FILE);
            String path=new File(".").getAbsolutePath();
            String screenshotpath=path.substring(0, path.length()-1);
            // create a new file 
            FileUtils.copyFile(scrFile, new File(screenshotpath+"log"+separator + filename));
            log.debug("the screenshot file in this file path:"+screenshotpath+"log"+separator + filename);
            Reporter.setCurrentTestResult(result);
            //Reporter.log("<a href=\"" + filename + "\">Screenshot</a>");
        }
        else
        {
            log.debug("This test method is working fine ,we marked it as passed");
        }
  }

 

  @AfterSuite
  public void afterSuite() {
      
      driver.quit();
      log.debug("quit the driver now ");
  }

}

本文转自hcy's workbench博客园博客,原文链接:http://www.cnblogs.com/alterhu/p/3216870.html ,如需转载请自行联系原作者。

目录
相关文章
|
存储 API
selenium源码通读·11 |webdriver/common/touch_actions.py-TouchActions类分析
selenium源码通读·11 |webdriver/common/touch_actions.py-TouchActions类分析
67 0
selenium源码通读·11 |webdriver/common/touch_actions.py-TouchActions类分析
|
数据采集 Web App开发 Linux
selenium源码通读·10 |webdriver/common/proxy.py-Proxy类分析
selenium源码通读·10 |webdriver/common/proxy.py-Proxy类分析
85 0
selenium源码通读·10 |webdriver/common/proxy.py-Proxy类分析
|
Web App开发 JSON Java
selenium源码通读·9 |webdriver/common/desired_capabilities.py-DesiredCapabilities类分析
selenium源码通读·9 |webdriver/common/desired_capabilities.py-DesiredCapabilities类分析
157 0
selenium源码通读·9 |webdriver/common/desired_capabilities.py-DesiredCapabilities类分析
selenium源码通读·8 |webdriver/common/keys.py-Keys类分析
selenium源码通读·8 |webdriver/common/keys.py-Keys类分析
43 0
selenium源码通读·8 |webdriver/common/keys.py-Keys类分析
selenium源码通读·7 |webdriver/common/by.py-By类分析
selenium源码通读·7 |webdriver/common/by.py-By类分析
67 0
selenium源码通读·7 |webdriver/common/by.py-By类分析
|
API
selenium源码通读·6 |webdriver/common/alert.py-Alert类分析
selenium源码通读·6 |webdriver/common/alert.py-Alert类分析
77 0
selenium源码通读·6 |webdriver/common/alert.py-Alert类分析
|
存储 API
selenium源码通读·5 |webdriver/common/action_chains.py-ActionChains类分析
selenium源码通读·5 |webdriver/common/action_chains.py-ActionChains类分析
78 0
selenium源码通读·5 |webdriver/common/action_chains.py-ActionChains类分析
|
Web App开发 JavaScript 前端开发
selenium源码通读 | common/exceptions.py异常类
selenium源码通读 | common/exceptions.py异常类
68 0
|
Web App开发 JavaScript
Selenium常见报错问题(1)- 先来认识下selenium常见异常类
Selenium常见报错问题(1)- 先来认识下selenium常见异常类
634 0
|
1月前
|
JavaScript 前端开发 测试技术
Python Selenium基本用法
Python Selenium基本用法
29 2

热门文章

最新文章

相关实验场景

更多