博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
4_Selenium框架封装
阅读量:4687 次
发布时间:2019-06-09

本文共 12301 字,大约阅读时间需要 41 分钟。

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文件
firefox
http://www.cnblogs.com/lizitest/
2
  • 解析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
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
webRadioGroup(String xpath) { try{ List
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
WebCheckBox(String xpath){ try{ List
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,欢迎大家前来咨询和探讨(暗号:栗子测试)

 
 

转载于:https://www.cnblogs.com/lizitest/p/5137407.html

你可能感兴趣的文章
压缩文件函数库(转载)
查看>>
【转】ubuntu12.04没有/var/log/messages解决
查看>>
Oracle EBS 初始化用户密码
查看>>
SYS_CONTEXT 详细用法
查看>>
Pycharm配置autopep8让Python代码更符合pep8规范
查看>>
函数的复写
查看>>
17_重入锁ReentrantLock
查看>>
winform窗口关闭提示
查看>>
64款工具,总有合适您的那款
查看>>
我的第一篇博客
查看>>
大数据学习线路整理
查看>>
【C++算法与数据结构学习笔记------单链表实现多项式】
查看>>
关于ProjectServer定制化项目中心页面
查看>>
使用Collectd + InfluxDB + Grafana进行JMX监控
查看>>
Linux下tar,zip命令详解
查看>>
C#垃圾回收机制
查看>>
31、任务三十一——表单联动
查看>>
python之hasattr、getattr和setattr函数
查看>>
maven使用阿里镜像配置文件
查看>>
Copy code from eclipse to word, save syntax.
查看>>