4_Selenium框架封装
上一篇 / 下一篇 2016-02-20 17:37:30 / 个人分类:Selenium Java
更好格式可去这里查看:
http://www.cnblogs.com/lizitest/p/5137407.html
1 封装WebDriver
封装代码编写
package com.selenium.test;
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.firefox.internal.ProfilesIni;
import org.openqa.selenium.ie.InternetExplorerDriver;
import org.openqa.selenium.remote.DesiredCapabilities;
public class InitWebDriver {
public static WebDriver myDriver(String browser) {
WebDriver driver = null;
if ("firefox".equals(browser.toLowerCase())) {
//启动本机firefox
ProfilesIni allProfiles = new ProfilesIni();
FirefoxProfile profile = allProfiles.getProfile("default");
//启动浏览器
driver = new FirefoxDriver(profile);
driver.manage().window().maximize();
}else if ("ie".equals(browser.toLowerCase())) {
//关闭保护模式
DesiredCapabilities capability = new DesiredCapabilities();
capability.setCapability(InternetExplorerDriver.INTRODUCE_FLAKINESS_BY_IGNORING_SECURITY_DOMAINS, true);
capability.setCapability("ignoreProtectedModeSettings",true);
//指定驱动位置,并加载驱动
System.setProperty("webdriver.ie.driver", "drivers/IEDriverServer.exe");
driver = new InternetExplorerDriver(capability);
driver.manage().window().maximize();
} else if ("chrome".equals(browser.toLowerCase())) {
//指定驱动位置,并加载驱动
System.setProperty("webdriver.chrome.driver", "drivers/chromedriver.exe");
driver = new ChromeDriver();
driver.manage().window().maximize();
}else{
System.out.println("浏览器指定错误!!!");
}
return driver;
}
}
测试代码编写
package com.selenium.test;
import org.openqa.selenium.WebDriver;
public class InitWebDriverTest {
public static void main(String[] args) {
WebDriver myBrowser = InitWebDriver.myDriver("firefox");
myBrowser.navigate().to("http://www.cnblogs.com/lizitest/");
// WebDriver myBrowser = InitWebDriver.myDriver("ie");
// myBrowser.navigate().to("http://www.cnblogs.com/lizitest/");
//
// WebDriver myBrowser = InitWebDriver.myDriver("chrome");
// myBrowser.navigate().to("http://www.cnblogs.com/lizitest/");
}
}
2 使用配置文件
加载jar包
编写config文件
<?xml version="1.0" encoding="UTF-8"?>
<chuanke>
<browser>firefox</browser>
<url>http://www.cnblogs.com/lizitest/</url>
<waitTime>2</waitTime>
</chuanke>
解析XML文件代码
package com.selenium.tool;
import java.io.File;
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;
/**
* @author 栗子测试
* 使用SAX(Simple APIs for XML,也即XML简单应用程序接口)解析XML文件
*
*/
public class ParseXML {
private Document document;
/**
* 构造函数
* 在新建对象的同时加载XML文件
*/
public ParseXML(String filePath){
this.loadXML(filePath);
}
/**
* 加载XML文件
*/
public void loadXML(String filePath){
//新建文件
File file = new File(filePath);
if(file.exists()){
//dom4j包中SAXReader
SAXReader saxReader = new SAXReader();
try {
document = saxReader.read(file);
} catch (DocumentException e) {
e.printStackTrace();
}
}else{
System.out.println("XML文件不存在");
}
}
/**
* 获取节点上的文本
*/
public String getSingleNodeText(String nodePath){
Element element = (Element) document.selectSingleNode(nodePath);
if(element != null){
return element.getTextTrim();
}else{
System.out.println("节点不存在!");
return null;
}
}
}
解析config文件
package com.selenium.util;
import com.selenium.tool.ParseXML;
public interface Config {
public static ParseXML xml = new ParseXML(".\\config\\config.xml");
public static String browser = xml.getSingleNodeText("//browser");
public static String url = xml.getSingleNodeText("//url");
public static String waitTime = xml.getSingleNodeText("//waitTime");
}
测试代码
package com.selenium.util;
import org.openqa.selenium.WebDriver;
public class InitWebDriverTest2 {
public static void main(String[] args) {
WebDriver myBrowser = InitWebDriver.myDriver(Config.browser);
myBrowser.navigate().to(Config.url);
}
}
3 xpath及控件识别
控件识别
package com.selenium.util;
import java.util.List;
import java.util.Set;
import org.openqa.selenium.Alert;
import org.openqa.selenium.By;
import org.openqa.selenium.ElementNotVisibleException;
import org.openqa.selenium.JavascriptExecutor;
import org.openqa.selenium.NoSuchElementException;
import org.openqa.selenium.NoSuchWindowException;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.interactions.Actions;
import org.openqa.selenium.support.ui.Select;
public class MyBrowser {
WebDriver driver =null;
public MyBrowser(String browsr) {
this.driver = InitWebDriver.myDriver(browsr);
}
//页面导航
public void navigateTo(String url) {
driver.navigate().to(url);
}
//输入框
public WebElement webEdit(String xpath){
try{
WebElement webEdit = driver.findElement(By.xpath(xpath));
webEdit.clear();
return webEdit;
}catch(NoSuchElementException e){
System.out.println("输入框不存在!");
return null;
}catch (ElementNotVisibleException e) {
System.out.println("XPath匹配多个输入框!");
return null;
}
}
//按钮
public WebElement webButton(String xpath){
try{
WebElement webButton = driver.findElement(By.xpath(xpath));
return webButton;
}catch(NoSuchElementException e){
System.out.println("按钮不存在!");
return null;
}catch (ElementNotVisibleException e) {
System.out.println("XPath匹配多个按钮!");
return null;
}
}
//链接
public WebElement link(String xpath) {
try{
WebElement link = driver.findElement(By.xpath(xpath));
return link;
}catch(NoSuchElementException e){
System.out.println("链接按钮不存在!");
return null;
}catch (ElementNotVisibleException e) {
System.out.println("XPath匹配多个链接!");
return null;
}
}
//悬停
public void hover(String xpath) {
try{
WebElement element = driver.findElement(By.xpath(xpath));
Actions action = new Actions(driver);
action.moveToElement(element).perform();
}catch(NoSuchElementException e){
System.out.println("悬停对象不存在!");
}catch (ElementNotVisibleException e) {
System.out.println("XPath匹配多个悬停对象!");
}
}
//窗口切换
public void switchToWindow(String title) {
try {
String currentHandle = driver.getWindowHandle();
Set<String> handles = driver.getWindowHandles();
for (String handle : handles){
if(handle.equals(currentHandle)){
continue;
}else{
driver.switchTo().window(handle);
if (driver.getTitle().contains(title)){ break; }
else{ continue; }
}
}
} catch (NoSuchWindowException e) {
System.out.println("没有找到窗口!");
}
}
//单选按钮
public List<WebElement> webRadioGroup(String xpath) {
try{
List<WebElement> radios = driver.findElements(By.xpath(xpath)); //定位所有单选按钮
return radios;
}catch(IndexOutOfBoundsException e){
System.out.println("单选按钮不存在!");
return null;
}catch (ElementNotVisibleException e) {
System.out.println("XPath匹配多个单选按钮!");
return null;
}
}
//多选按钮
public List<WebElement> WebCheckBox(String xpath){
try{
List<WebElement> checkboxs = driver.findElements(By.xpath(xpath)); //定位所有多选按钮
return checkboxs;
}catch(IndexOutOfBoundsException e){
System.out.println("多选按钮不存在!");
return null;
}catch (ElementNotVisibleException e) {
System.out.println("XPath匹配多个多选按钮!");
return null;
}
}
//下拉框
public Select webList(String xpath){
try{
WebElement selectElement = driver.findElement(By.xpath(xpath)); //先定位下拉框
Select select = new Select(selectElement);
return select;
}catch(NoSuchElementException e){
System.out.println("下拉框不存在!");
return null;
}catch (ElementNotVisibleException e) {
System.out.println("XPath匹配多个下拉框!");
return null;
}
}
//上传文件(input)
public WebElement upLoadFile(String xpath){
try{
WebElement file = driver.findElement(By.xpath(xpath));
return file;
}catch(NoSuchElementException e){
System.out.println("上传文件控件不存在!");
return null;
}catch (ElementNotVisibleException e) {
System.out.println("XPath匹配多个上传文件控件!");
return null;
}
}
//JS
public void executeJS(String jsString){
JavascriptExecutor js = (JavascriptExecutor)driver;
js.executeScript(jsString);
}
//iframe
public void switchToIframe(String xpath){
WebElement iframe. = driver.findElement(By.xpath(xpath));
driver.switchTo().frame(iframe);
}
//弹出框
public Alert switchToAlert(){
Alert alert = driver.switchTo().alert(); //切换到弹出窗
return alert;
}
}
xpath维护(部分)
package com.seleniu.pages;
//接口只是一个抽象方法声明和静态不能被修改的数据的集合
public interface BaiduHome {
public String LINK_LOGIN = "//div[@id='u1']/a[text()='登录']";
public String WEBEDIT_USERNAME = "//input[@id='TANGRAM__PSP_8__userName']";
public String WEBEDIT_PASSWORD = "//input[@id='TANGRAM__PSP_8__password']";
public String WEBBUTTON_USERNAME = "//input[@id='TANGRAM__PSP_8__submit']";
public String LINK_USERNAME = "//a[@id='s_username_top']/span";
}
测试代码
package com.selenium.util;
import com.seleniu.pages.BaiduAccountSetting;
import com.seleniu.pages.BaiduHome;
import com.seleniu.pages.BaiduPersonalSetting;
public class MyBrowserTest implements BaiduHome,BaiduAccountSetting,BaiduPersonalSetting{
public static void main(String[] args) throws InterruptedException {
MyBrowser myBrowser = new MyBrowser(Config.browser);
myBrowser.navigateTo(Config.url);
myBrowser.link(LOGIN).click();
Thread.sleep(3000);
//登录
myBrowser.webEdit(USERNAME).sendKeys("栗子测试");
myBrowser.webEdit(PASSWORD).sendKeys("2472471982");
myBrowser.webButton(WEBBUTTON_USERNAME).click();
Thread.sleep(3000);
//悬停
myBrowser.hover(LINK_USERNAME);
//账号设置
myBrowser.link(ACCOUNTSETTING).click();
myBrowser.switchToWindow(AS_TITLE);
//修改资料
myBrowser.link(MODIFYDATA).click();
myBrowser.switchToWindow(PS_TITLE);
//基本资料
myBrowser.webRadioGroup(GENDER).get(0).click();
myBrowser.link(DIV_BLOOD).click();
myBrowser.link(LINK_BLOOD).click();
myBrowser.webButton(SAVE).click();
//详细资料
myBrowser.link(DETAILEINFO).click();
myBrowser.WebCheckBox(CHARACTER).get(5).click();
myBrowser.webButton(SAVE).click();
//其他
myBrowser.webList(OTHER).selectByVisibleText("XX");
myBrowser.upLoadFile(OTHER).sendKeys("XXX");
myBrowser.executeJS("XXX");
myBrowser.switchToIframe("XXX");
myBrowser.switchToAlert().accept();
}
}
目录结构
http://www.cnblogs.com/lizitest/p/5137407.html
1 封装WebDriver
封装代码编写
package com.selenium.test;
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.firefox.internal.ProfilesIni;
import org.openqa.selenium.ie.InternetExplorerDriver;
import org.openqa.selenium.remote.DesiredCapabilities;
public class InitWebDriver {
public static WebDriver myDriver(String browser) {
WebDriver driver = null;
if ("firefox".equals(browser.toLowerCase())) {
//启动本机firefox
ProfilesIni allProfiles = new ProfilesIni();
FirefoxProfile profile = allProfiles.getProfile("default");
//启动浏览器
driver = new FirefoxDriver(profile);
driver.manage().window().maximize();
}else if ("ie".equals(browser.toLowerCase())) {
//关闭保护模式
DesiredCapabilities capability = new DesiredCapabilities();
capability.setCapability(InternetExplorerDriver.INTRODUCE_FLAKINESS_BY_IGNORING_SECURITY_DOMAINS, true);
capability.setCapability("ignoreProtectedModeSettings",true);
//指定驱动位置,并加载驱动
System.setProperty("webdriver.ie.driver", "drivers/IEDriverServer.exe");
driver = new InternetExplorerDriver(capability);
driver.manage().window().maximize();
} else if ("chrome".equals(browser.toLowerCase())) {
//指定驱动位置,并加载驱动
System.setProperty("webdriver.chrome.driver", "drivers/chromedriver.exe");
driver = new ChromeDriver();
driver.manage().window().maximize();
}else{
System.out.println("浏览器指定错误!!!");
}
return driver;
}
}
测试代码编写
package com.selenium.test;
import org.openqa.selenium.WebDriver;
public class InitWebDriverTest {
public static void main(String[] args) {
WebDriver myBrowser = InitWebDriver.myDriver("firefox");
myBrowser.navigate().to("http://www.cnblogs.com/lizitest/");
// WebDriver myBrowser = InitWebDriver.myDriver("ie");
// myBrowser.navigate().to("http://www.cnblogs.com/lizitest/");
//
// WebDriver myBrowser = InitWebDriver.myDriver("chrome");
// myBrowser.navigate().to("http://www.cnblogs.com/lizitest/");
}
}
2 使用配置文件
加载jar包
编写config文件
<?xml version="1.0" encoding="UTF-8"?>
<chuanke>
<browser>firefox</browser>
<url>http://www.cnblogs.com/lizitest/</url>
<waitTime>2</waitTime>
</chuanke>
解析XML文件代码
package com.selenium.tool;
import java.io.File;
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;
/**
* @author 栗子测试
* 使用SAX(Simple APIs for XML,也即XML简单应用程序接口)解析XML文件
*
*/
public class ParseXML {
private Document document;
/**
* 构造函数
* 在新建对象的同时加载XML文件
*/
public ParseXML(String filePath){
this.loadXML(filePath);
}
/**
* 加载XML文件
*/
public void loadXML(String filePath){
//新建文件
File file = new File(filePath);
if(file.exists()){
//dom4j包中SAXReader
SAXReader saxReader = new SAXReader();
try {
document = saxReader.read(file);
} catch (DocumentException e) {
e.printStackTrace();
}
}else{
System.out.println("XML文件不存在");
}
}
/**
* 获取节点上的文本
*/
public String getSingleNodeText(String nodePath){
Element element = (Element) document.selectSingleNode(nodePath);
if(element != null){
return element.getTextTrim();
}else{
System.out.println("节点不存在!");
return null;
}
}
}
解析config文件
package com.selenium.util;
import com.selenium.tool.ParseXML;
public interface Config {
public static ParseXML xml = new ParseXML(".\\config\\config.xml");
public static String browser = xml.getSingleNodeText("//browser");
public static String url = xml.getSingleNodeText("//url");
public static String waitTime = xml.getSingleNodeText("//waitTime");
}
测试代码
package com.selenium.util;
import org.openqa.selenium.WebDriver;
public class InitWebDriverTest2 {
public static void main(String[] args) {
WebDriver myBrowser = InitWebDriver.myDriver(Config.browser);
myBrowser.navigate().to(Config.url);
}
}
3 xpath及控件识别
控件识别
package com.selenium.util;
import java.util.List;
import java.util.Set;
import org.openqa.selenium.Alert;
import org.openqa.selenium.By;
import org.openqa.selenium.ElementNotVisibleException;
import org.openqa.selenium.JavascriptExecutor;
import org.openqa.selenium.NoSuchElementException;
import org.openqa.selenium.NoSuchWindowException;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.interactions.Actions;
import org.openqa.selenium.support.ui.Select;
public class MyBrowser {
WebDriver driver =null;
public MyBrowser(String browsr) {
this.driver = InitWebDriver.myDriver(browsr);
}
//页面导航
public void navigateTo(String url) {
driver.navigate().to(url);
}
//输入框
public WebElement webEdit(String xpath){
try{
WebElement webEdit = driver.findElement(By.xpath(xpath));
webEdit.clear();
return webEdit;
}catch(NoSuchElementException e){
System.out.println("输入框不存在!");
return null;
}catch (ElementNotVisibleException e) {
System.out.println("XPath匹配多个输入框!");
return null;
}
}
//按钮
public WebElement webButton(String xpath){
try{
WebElement webButton = driver.findElement(By.xpath(xpath));
return webButton;
}catch(NoSuchElementException e){
System.out.println("按钮不存在!");
return null;
}catch (ElementNotVisibleException e) {
System.out.println("XPath匹配多个按钮!");
return null;
}
}
//链接
public WebElement link(String xpath) {
try{
WebElement link = driver.findElement(By.xpath(xpath));
return link;
}catch(NoSuchElementException e){
System.out.println("链接按钮不存在!");
return null;
}catch (ElementNotVisibleException e) {
System.out.println("XPath匹配多个链接!");
return null;
}
}
//悬停
public void hover(String xpath) {
try{
WebElement element = driver.findElement(By.xpath(xpath));
Actions action = new Actions(driver);
action.moveToElement(element).perform();
}catch(NoSuchElementException e){
System.out.println("悬停对象不存在!");
}catch (ElementNotVisibleException e) {
System.out.println("XPath匹配多个悬停对象!");
}
}
//窗口切换
public void switchToWindow(String title) {
try {
String currentHandle = driver.getWindowHandle();
Set<String> handles = driver.getWindowHandles();
for (String handle : handles){
if(handle.equals(currentHandle)){
continue;
}else{
driver.switchTo().window(handle);
if (driver.getTitle().contains(title)){ break; }
else{ continue; }
}
}
} catch (NoSuchWindowException e) {
System.out.println("没有找到窗口!");
}
}
//单选按钮
public List<WebElement> webRadioGroup(String xpath) {
try{
List<WebElement> radios = driver.findElements(By.xpath(xpath)); //定位所有单选按钮
return radios;
}catch(IndexOutOfBoundsException e){
System.out.println("单选按钮不存在!");
return null;
}catch (ElementNotVisibleException e) {
System.out.println("XPath匹配多个单选按钮!");
return null;
}
}
//多选按钮
public List<WebElement> WebCheckBox(String xpath){
try{
List<WebElement> checkboxs = driver.findElements(By.xpath(xpath)); //定位所有多选按钮
return checkboxs;
}catch(IndexOutOfBoundsException e){
System.out.println("多选按钮不存在!");
return null;
}catch (ElementNotVisibleException e) {
System.out.println("XPath匹配多个多选按钮!");
return null;
}
}
//下拉框
public Select webList(String xpath){
try{
WebElement selectElement = driver.findElement(By.xpath(xpath)); //先定位下拉框
Select select = new Select(selectElement);
return select;
}catch(NoSuchElementException e){
System.out.println("下拉框不存在!");
return null;
}catch (ElementNotVisibleException e) {
System.out.println("XPath匹配多个下拉框!");
return null;
}
}
//上传文件(input)
public WebElement upLoadFile(String xpath){
try{
WebElement file = driver.findElement(By.xpath(xpath));
return file;
}catch(NoSuchElementException e){
System.out.println("上传文件控件不存在!");
return null;
}catch (ElementNotVisibleException e) {
System.out.println("XPath匹配多个上传文件控件!");
return null;
}
}
//JS
public void executeJS(String jsString){
JavascriptExecutor js = (JavascriptExecutor)driver;
js.executeScript(jsString);
}
//iframe
public void switchToIframe(String xpath){
WebElement iframe. = driver.findElement(By.xpath(xpath));
driver.switchTo().frame(iframe);
}
//弹出框
public Alert switchToAlert(){
Alert alert = driver.switchTo().alert(); //切换到弹出窗
return alert;
}
}
xpath维护(部分)
package com.seleniu.pages;
//接口只是一个抽象方法声明和静态不能被修改的数据的集合
public interface BaiduHome {
public String LINK_LOGIN = "//div[@id='u1']/a[text()='登录']";
public String WEBEDIT_USERNAME = "//input[@id='TANGRAM__PSP_8__userName']";
public String WEBEDIT_PASSWORD = "//input[@id='TANGRAM__PSP_8__password']";
public String WEBBUTTON_USERNAME = "//input[@id='TANGRAM__PSP_8__submit']";
public String LINK_USERNAME = "//a[@id='s_username_top']/span";
}
测试代码
package com.selenium.util;
import com.seleniu.pages.BaiduAccountSetting;
import com.seleniu.pages.BaiduHome;
import com.seleniu.pages.BaiduPersonalSetting;
public class MyBrowserTest implements BaiduHome,BaiduAccountSetting,BaiduPersonalSetting{
public static void main(String[] args) throws InterruptedException {
MyBrowser myBrowser = new MyBrowser(Config.browser);
myBrowser.navigateTo(Config.url);
myBrowser.link(LOGIN).click();
Thread.sleep(3000);
//登录
myBrowser.webEdit(USERNAME).sendKeys("栗子测试");
myBrowser.webEdit(PASSWORD).sendKeys("2472471982");
myBrowser.webButton(WEBBUTTON_USERNAME).click();
Thread.sleep(3000);
//悬停
myBrowser.hover(LINK_USERNAME);
//账号设置
myBrowser.link(ACCOUNTSETTING).click();
myBrowser.switchToWindow(AS_TITLE);
//修改资料
myBrowser.link(MODIFYDATA).click();
myBrowser.switchToWindow(PS_TITLE);
//基本资料
myBrowser.webRadioGroup(GENDER).get(0).click();
myBrowser.link(DIV_BLOOD).click();
myBrowser.link(LINK_BLOOD).click();
myBrowser.webButton(SAVE).click();
//详细资料
myBrowser.link(DETAILEINFO).click();
myBrowser.WebCheckBox(CHARACTER).get(5).click();
myBrowser.webButton(SAVE).click();
//其他
myBrowser.webList(OTHER).selectByVisibleText("XX");
myBrowser.upLoadFile(OTHER).sendKeys("XXX");
myBrowser.executeJS("XXX");
myBrowser.switchToIframe("XXX");
myBrowser.switchToAlert().accept();
}
}
目录结构
相关阅读:
- 第一个UI脚本-Python+Selenium (zaza9084, 2016-2-02)
- 1_Selenium环境搭建 (lirenlong_9990, 2016-2-02)
- 2_Selenium对象识别 (lirenlong_9990, 2016-2-04)
- Selenium+Python浏览器调用:伪浏览器 (zaza9084, 2016-2-05)
- selenium实现firefox浏览器的自动下载保存文件 (ewwerpm, 2016-2-13)
- Selenium之偷懒教程 (zaza9084, 2016-2-15)
- 3_Selenium+TestNG (lirenlong_9990, 2016-2-16)
- 3_Selenium+TestNG (lirenlong_9990, 2016-2-16)
TAG: Selenium selenium webdriver 框架