selenium+java 数据驱动框架设计

1、跨浏览器支持

(1)目录结构如下图:


(2)config.properties配置文件内容如下:(通过注释切换不同的浏览器)

# browser switcher
#browserName=Firefox
browserName=Chrome
#browserName=IE

#test server switcher
URL=http://www.jd.com
#URL=https://www.taobao.com

(2)浏览器引擎类(browserEngine)代码:

package Framwork;

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.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\\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", ".\\drivers\\geckodriver.exe");
			driver=new FirefoxDriver();
			Logger.Output(LogType.LogTypeName.INFO, "Launching Firefox...");
		}
		else if(browserName.equalsIgnoreCase("Chrome")) {
			System.setProperty("webdriver.chrome.driver", ".\\drivers\\chromedriver01.exe");
			driver=new ChromeDriver();
			Logger.Output(LogType.LogTypeName.INFO, "Launching Chrome...");
		}
		else if(browserName.equalsIgnoreCase("IE")) {
			System.setProperty("webdriver.ie.driver", ".\\drivers\\IEDriver.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...");
		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.");
	}
	//最大化浏览器
	public void callmaxbrowser() {
		driver.manage().window().maximize();
	}

}

(3)测试页面类()代码:

package testSuite;

import org.testng.annotations.Test;
import org.testng.annotations.BeforeClass;

import java.io.IOException;

import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.testng.annotations.AfterClass;

import Framwork.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() {
	  driver.findElement(By.id("key")).sendKeys("iponeX");
	  driver.findElement(By.xpath("//div[@id='search']/div/div[2]/button")).click();
  }
  
  @AfterClass
  public void tearDown() {
	  driver.quit();
  }

}

注意:1、driver的传递,保证所有脚本只有一个唯一的driver; 2、该测试脚本还用到了Framwork包中两个java输出日志的类:Logger.java和LogType.java;

2、页面基类

(1)目录结构


代码如下:

package Framwork;

import java.util.Iterator;
import java.util.Set;

import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;


public class BasePage {
	public static WebDriver driver;
	public static String pageTitle;
	public static String pageUrl;
	
	//构造方法
	protected BasePage(WebDriver driver) {
		BasePage.driver=driver;
	}
	//输入框中输入text方法
	protected void type(WebElement element,String text) {
		try {
			if(element.isEnabled()) {
				element.clear();
				Logger.Output(LogType.LogTypeName.INFO, "Clean the value if any in"+element.toString()+".");
				element.sendKeys(text);
				Logger.Output(LogType.LogTypeName.INFO, "Type value is:"+text+".");
			}	
			}catch(Exception e) {
				Logger.Output(LogType.LogTypeName.ERROR, e.getMessage()+".");
		}
	}
	//点击
	protected void click(WebElement element) {
		try {
			if(element.isEnabled()) {
				element.click();
				Logger.Output(LogType.LogTypeName.INFO, "Element:"+element.toString()+"was clicked.");
			}
		}catch(Exception e){
			Logger.Output(LogType.LogTypeName.ERROR, e.getMessage()+".");
		}
	}
	//清除
	protected void clean(WebElement element) {
		try {
			if(element.isEnabled()) {
				element.clear();
				Logger.Output(LogType.LogTypeName.INFO, "Element"+element.toString()+"was cleaned.");
			}
		}catch(Exception e) {
			Logger.Output(LogType.LogTypeName.ERROR, e.getMessage()+".");
		}
	}
	//判断页面元素是否在当前页面出现
	protected void verifyElementIsPresent(WebElement element) {
		try {
			if(element.isDisplayed()) {
				Logger.Output(LogType.LogTypeName.INFO,"This Element"+element.toString().trim()+"is present.");
			}
		}catch (Exception e) {
			Logger.Output(LogType.LogTypeName.ERROR, e.getMessage()+".");
		}
	}
	//当前页面的Title
	protected String getCurrentPageTitle() {
		pageTitle=driver.getTitle();
		Logger.Output(LogType.LogTypeName.INFO,"Current page title is"+pageTitle);
		return pageTitle;
	}
	//当前页面的Url
	protected String getCurrentPageUrl() {
		pageUrl=driver.getCurrentUrl();
		Logger.Output(LogType.LogTypeName.INFO,"Current page Url is"+pageUrl);
		return pageUrl;
	}
	//多窗口之间的切换
	public void switchWindwo() {
		String currentWindow=driver.getWindowHandle();//获取当前窗口句柄
			Set<String> handles=driver.getWindowHandles();//获取所有窗口句柄
			Logger.Output(LogType.LogTypeName.INFO,"当前窗口数量:"+handles.size());
			Iterator<String> it=handles.iterator();
			while(it.hasNext()) {
				if(currentWindow==it.next()) {
					continue;
				}
				try {
					driver.close();//关闭旧窗口
					WebDriver window=driver.switchTo().window(it.next());//切换到新窗口
					Logger.Output(LogType.LogTypeName.INFO,"new page title is"+window.getTitle());
				}catch(Exception e) {
					Logger.Output(LogType.LogTypeName.ERROR,"切换到新打开窗口"+e.getMessage());
				}
				//driver.close();//关闭当前焦点所在的窗口
			}
			//driver.switchTo().window(currentWindow);//回到原来页面
	}

}

3、实现POM和测试页面基类:


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值