zoukankan      html  css  js  c++  java
  • 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包

    • 编写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();
            
        }
    
    }
    •  目录结构

     

    栗子测试

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

     
     
  • 相关阅读:
    zookeeper部署
    Hadoop集群的构建和安装
    numpy ndarray求其最值的索引
    两数之和
    盛最多水的容器
    mysql 单表卡死
    Leetcode 258. Add Digits
    Matlab中添加路径与去除路径
    Leetcode 136 Single Number
    Leetcode 485. Max Consecutive Ones
  • 原文地址:https://www.cnblogs.com/lizitest/p/5137407.html
Copyright © 2011-2022 走看看