4_Selenium框架封装

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包

4_Selenium框架封装_第1张图片

  • 编写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();
        
    }

}
  •  目录结构

 4_Selenium框架封装_第2张图片

栗子测试
  • 所有文章均为原创,是栗子测试所有人员智慧的结晶,如有转载请标明出处
  • 如果您在阅读之后觉得有所收获,请点击右下角推荐
  • QQ:2472471982,欢迎大家前来咨询和探讨(暗号:栗子测试)
 
 

你可能感兴趣的:(4_Selenium框架封装)