webDriver自动化测试框架详解

一、 简介

  1. WebDriver API相对于Selenium Remote Control API来说,虽然同样是控制浏览器,但它的编程接口更加简洁
  2. WebDriver可以应对那些网页本身不重新加载的动态网页。
  3. Selenium Remote Control是采用向浏览器注入javascript脚本来控制浏览器的,但WebDriver与之不同,它是直接使用浏览器内置的自动化支持来控制浏览器的。
  4. WebDriver实际上就像它的名字一样,向上屏蔽各厂商浏览器的差异,提供了一个统一的编程API,方便广大程序员控制浏览器的行为。

二、 webDriver 的 driver

  1. 即然要屏蔽各厂商浏览器的差异,那么各厂商自然需要根据WebDriver规范作出各自的实现。WebDriver官方文档就列出各实现:HtmlUnit Driver、Firefox Driver、InternetExplorerDriver、ChromeDriver、Opera Driver、iOS Driver、Android Driver。这些Driver各有优缺点及各自适用的场景,具体可看官方文档说明。其实一看这些名字就知道是什么意思,要控制哪种浏览器就需要下载安装对应的Driver。比如我这里是Mac OSX系统,而且想控制该系统上的Chrome浏览器,那么就下载chromedriver_mac32.zip(注意该Driver对你的Chrome浏览器有版本要求,要求版本必须是v46-50这个范围),将该压缩包里的可执行文件放到PATH环境变量目录中,比如放到/usr/local/bin目录中
  2. 各个driver 的官方文档说明 https://www.seleniumhq.org/docs/03_webdriver.jsp#selenium-webdriver-s-drivers

三、 webDriver 使用前准备

  1. 官方还很贴心地为WebDriver提供了更主流语言的SDK。支持的语言有Java、C#、Python、Ruby、Perl、PHP、JavaScript。但我感觉这种测试相关的编程语言最好还是用脚本语言合适一点,改起来很方便,不需要时时编译。

  2. Js(不用js执行测试 则忽略)

     //前提是先安装好NodeJSmkdir test && cd testnpm init //这里根据提示一步步初始化一个新的NodeJS项目npm install selenium-webdriver --save //安装WebDriver JavaScript SDK的npm依赖
    
  3. Java maven 依赖:

     <!-- https://mvnrepository.com/artifact/org.seleniumhq.selenium/selenium-java --><dependency><groupId>org.seleniumhq.selenium</groupId><artifactId>selenium-java</artifactId><version>3.141.0</version></dependency>
    

四、 webDriver 使用

  1. 控制浏览器

     import org.openqa.selenium.WebDriver;import org.openqa.selenium.chrome.ChromeDriver;import org.openqa.selenium.firefox.FirefoxDriver;import org.openqa.selenium.ie.InternetExplorerDriver;/*** webDriver 打开各种浏览器* @author outman* @date  2018-11-07* */public class Demo_02 {public static void main(String[] args) {//     openFirFox();//     openIE();openChrome();}/*** 打开谷歌浏览器* */private static void openChrome() {// chromedriver.exe  下载地址 : http://chromedriver.storage.googleapis.com/index.html// 注意: 下载驱动时驱动版本要与selenium 版本一致System.setProperty("webdriver.chrome.driver","D:\\DevelopSoftware\\chromedriver_win32\\chromedriver.exe");WebDriver driver = new ChromeDriver();// 在执行操作是可能会报错: Exception in thread "main" org.openqa.selenium.SessionNotCreatedException: session not created: Chrome version must be >= 68.0.3440.0 // 解決:  使chromedriver 版本与chrome 版本相对应   参考chromedriver与chrome 版本映射关系 https://blog.csdn.net/huilan_same/article/details/51896672driver.get("http://www.baidu.com");}/*** 打开IE浏览器* */ private static void openIE() {// IEDriverServer.exe 下载地址   https://github.com/SeleniumHQ/selenium/wiki/InternetExplorerDriver// 注意: 下载驱动时驱动版本要与selenium 版本一致// 可能报错:Exception in thread "main" org.openqa.selenium.SessionNotCreatedException: Unexpected error launching Internet Explorer. Protected Mode settings are not the same for all zones. Enable Protected Mode must be set to the same value (enabled or disabled) for all zones.// 解决: 设置internet选项  --  安全 -- 把所有的启动保护模式都关闭System.setProperty("webdriver.ie.driver", "D:\\DevelopSoftware\\IEDriverServer_x64_3.141.0\\IEDriverServer.exe");WebDriver driver = new InternetExplorerDriver();driver.get("http://www.baidu.com");}/*** 打开火狐浏览器* @throws InterruptedException * */private static void openFirFox() throws InterruptedException {// geckodriver 下载地址: https://github.com/mozilla/geckodriverSystem.setProperty("webdriver.gecko.driver", "D:\\DevelopSoftware\\geckodriver-v0.23.0-win64\\geckodriver.exe");//读取获取浏览器二进制文件System.setProperty("webdriver.firefox.bin", "D:\\应用\\FoxMail\\firefox.exe");WebDriver dirver = new FirefoxDriver();dirver.get("http://www.baidu.com");}}
    
  2. 定位dom元素

     import org.openqa.selenium.By;import org.openqa.selenium.WebDriver;import org.openqa.selenium.WebElement;import org.openqa.selenium.firefox.FirefoxDriver;/*** 定位dom元素* * @author outman* @date 2018-11-07*/public class Demo_03 {public static void main(String[] args) {// 获取驱动并打开浏览器WebDriver dirver = openFirFox();// 定位dom 元素findElement(dirver);}/*** 定位dom 元素*/private static void findElement(WebDriver dirver) {// 打开百度搜索页dirver.get("http://www.baidu.com");// 根据ID 定位元素 搜索框WebElement kw = dirver.findElement(By.id("kw"));System.out.println("搜索框使用标签:" + kw.getTagName());// 根据class 类名定位 搜索框WebElement kw2 = dirver.findElement(By.className("s_ipt"));System.out.println("搜索框使用标签:" + kw2.getTagName());// 根据tagName定位 搜索框WebElement kw3 = dirver.findElement(By.tagName("input"));System.out.println("搜索框使用标签:" + kw3.getTagName());// 根据name定位 搜索框WebElement kw4 = dirver.findElement(By.name("wd"));System.out.println("搜索框使用标签:" + kw4.getTagName());// 根据链接文字定位 页脚链接WebElement kw5 = dirver.findElement(By.linkText("把百度设为主页"));System.out.println("链接使用标签:" + kw5.getTagName());// 根据链接部分文字定位 页脚链接WebElement kw6 = dirver.findElement(By.partialLinkText("百度"));System.out.println("链接使用标签:" + kw6.getTagName());// 根据css选择器定位 搜索框    css选择器参考: http://www.w3school.com.cn/cssref/css_selectors.aspWebElement kw7 = dirver.findElement(By.cssSelector("#kw"));System.out.println("搜索框使用标签:" + kw7.getTagName());// 根据xpath定位 搜索框    xpath语法参考: http://www.w3school.com.cn/xpath/xpath_syntax.aspWebElement kw8 = dirver.findElement(By.xpath("//input"));System.out.println("搜索框使用标签:" + kw8.getTagName());}/*** 打开火狐浏览器*/private static WebDriver openFirFox() {// geckodriver 下载地址: https://github.com/mozilla/geckodriverSystem.setProperty("webdriver.gecko.driver", "D:\\DevelopSoftware\\geckodriver-v0.23.0-win64\\geckodriver.exe");// 读取获取浏览器二进制文件System.setProperty("webdriver.firefox.bin", "D:\\应用\\FoxMail\\firefox.exe");WebDriver dirver = new FirefoxDriver();return dirver;}}
    
    1. 这么多种定位UI元素的办法,总有一款可以适应你的需求。我个人比较喜欢使用css selector来定位元素。要得到一个元素的css selector也很简单,只需要使用Chrome的开发者工具查看这个元素,然后在这个元素上右键,点击Copy selector就得到了(当然如有可能最好对得到的css selector简写一下)。
  3. 操作dom元素

     import org.openqa.selenium.By;import org.openqa.selenium.WebDriver;import org.openqa.selenium.WebElement;import org.openqa.selenium.firefox.FirefoxDriver;/*** 操作dom* * @author outman* @date 2018-11-07*/public class Demo_04 {public static void main(String[] args) {// 打开浏览器WebDriver dirver = openFirFox();// 执行操作doExcult(dirver);}/*** 执行操作*/private static void doExcult(WebDriver dirver) {// 打开百度dirver.get("http://www.baidu.com");// 获取元素  百度一下按钮WebElement sbtn = dirver.findElement(By.cssSelector("#su"));// 获取属性的值System.out.println("按钮文字:"+sbtn.getAttribute("value"));// 获取元素  页脚链接WebElement linkOne = dirver.findElement(By.cssSelector("#setf"));// 获取文本内容System.out.println("链接文本:"+linkOne.getText());//连续获取元素WebElement soutuBtn = dirver.findElement(By.className("fm"));WebElement sInput = soutuBtn.findElement(By.tagName("span")).findElement(By.name("wd"));System.out.println("搜索框使用标签:"+sInput.getTagName());//向input输入文字sInput.sendKeys("百度一下");System.out.println("搜索框内容:"+sInput.getAttribute("value"));//清空input 元素内容sInput.clear();System.out.println("搜索框内容:"+sInput.getAttribute("value"));//点击按钮sInput.sendKeys("百度一下");sbtn.click();//提交表单sInput.clear();sInput.sendKeys("百度两下");sbtn.submit();}/*** 打开火狐浏览器*/private static WebDriver openFirFox() {// geckodriver 下载地址: https://github.com/mozilla/geckodriverSystem.setProperty("webdriver.gecko.driver", "D:\\DevelopSoftware\\geckodriver-v0.23.0-win64\\geckodriver.exe");// 读取获取浏览器二进制文件System.setProperty("webdriver.firefox.bin", "D:\\应用\\FoxMail\\firefox.exe");WebDriver dirver = new FirefoxDriver();return dirver;}}
    
  4. 操作窗口

     import org.openqa.selenium.Dimension;import org.openqa.selenium.JavascriptExecutor;import org.openqa.selenium.Point;import org.openqa.selenium.WebDriver;import org.openqa.selenium.firefox.FirefoxDriver;/*** 操作窗口* * @author outman* @date 2018-11-07*/public class Demo_05 {public static void main(String[] args) {// 打开浏览器WebDriver dirver = openFirFox();// 执行操作doExcult(dirver);}/*** 执行操作*/private static void doExcult(WebDriver dirver) {// 创建js 执行对象JavascriptExecutor jsExceut = (JavascriptExecutor) dirver;// 导航到百度dirver.get("http://www.baidu.com");// 创建多个窗口String js = "window.open(\"https://www.sogou.com\");";String js2 = "window.open(\"http://www.w3school.com.cn/xpath/xpath_syntax.asp\");";// 当只传入js脚本时 , 默认执行该js 的对象时浏览器jsExceut.executeScript(js);jsExceut.executeScript(js2);// 设置窗口位置dirver.manage().window().setPosition(new Point(100, 100));// 设置窗口大小dirver.manage().window().setSize(new Dimension(500 , 200));// 最大化窗口dirver.manage().window().maximize();// 全屏dirver.manage().window().fullscreen();}/*** 打开火狐浏览器*/private static WebDriver openFirFox() {// geckodriver 下载地址: https://github.com/mozilla/geckodriverSystem.setProperty("webdriver.gecko.driver", "D:\\DevelopSoftware\\geckodriver-v0.23.0-win64\\geckodriver.exe");// 读取获取浏览器二进制文件System.setProperty("webdriver.firefox.bin", "D:\\应用\\FoxMail\\firefox.exe");WebDriver dirver = new FirefoxDriver();return dirver;}}
    
  5. 在窗口或frame 之间切换

     import java.util.Set;import org.openqa.selenium.JavascriptExecutor;import org.openqa.selenium.WebDriver;import org.openqa.selenium.WebElement;import org.openqa.selenium.firefox.FirefoxDriver;/*** 在窗口或Frame 之间切换* * @author outman* @date 2018-11-07*/public class Demo_06 {public static void main(String[] args) {// 打开浏览器WebDriver dirver = openFirFox();// 执行操作doExecute(dirver);}/*** 执行操作* */private static void doExecute(WebDriver dirver) {JavascriptExecutor jsExecute = (JavascriptExecutor) dirver;String openWindowPre = "window.open('";String openWindowSuf = "');";String url_1 = "https://www.sogou.com";String url_2 = "http://田杰.wang";// 打开多个窗口dirver.get("http://www.baidu.com");//        jsExecute.executeScript(openWindowPre+url_1+openWindowSuf);//     jsExecute.executeScript(openWindowPre+url_2+openWindowSuf);// 获取当前窗口的handleString windowHandle = dirver.getWindowHandle();System.out.println("当前浏览器handle:"+windowHandle);// 列出浏览器所有窗口的handleSet<String> windowHandles = dirver.getWindowHandles();System.out.println("所有窗口的handle:"+windowHandles);// 获取当前页面标题 String title = dirver.getTitle();System.out.println("当前页面标题:"+title);// 获取当前页面源码String pageSource = dirver.getPageSource();//System.out.println("当前页面源码:"+pageSource);// 获取当前页面urlString currentUrl = dirver.getCurrentUrl();System.out.println("当前页面url:"+currentUrl);// 聚焦到顶部窗口  或  顶部frameWebDriver defaultContent = dirver.switchTo().defaultContent();// 返回到当前聚焦的元素  如果没有聚焦的元素  则返回bodyWebElement activeElement = dirver.switchTo().activeElement();// 切换单当前活跃的提示窗 //        Alert alert = dirver.switchTo().alert(); //没有找到alert会抛异常// 切换到指定窗口WebDriver window = dirver.switchTo().window(windowHandle);// 传入 name 或者handle// 切换frameWebDriver frame = dirver.switchTo().frame("");// 切换到父frameWebDriver parentFrame = dirver.switchTo().parentFrame();}/*** 打开火狐浏览器*/private static WebDriver openFirFox() {// geckodriver 下载地址: https://github.com/mozilla/geckodriverSystem.setProperty("webdriver.gecko.driver", "D:\\DevelopSoftware\\geckodriver-v0.23.0-win64\\geckodriver.exe");// 读取获取浏览器二进制文件System.setProperty("webdriver.firefox.bin", "D:\\应用\\FoxMail\\firefox.exe");WebDriver dirver = new FirefoxDriver();return dirver;}}
    
  6. 操作alert

     点击Alert窗口中的OK:driver.switchTo().alert().accept();点击Alert窗口中的Cancel:driver.switchTo().alert().dismiss();向Alert窗口输入文字:driver.switchTo().alert().sendKeys(‘abcd’);
    
  7. 操作浏览器的导航及地址栏

     import org.openqa.selenium.WebDriver;import org.openqa.selenium.firefox.FirefoxDriver;/*** 操作浏览器的导航及地址栏* * @author outman* @date 2018-11-07*/public class Demo_07 {public static void main(String[] args) {// 打开浏览器WebDriver dirver = openFirFox();// 执行操作doExecute(dirver);}/*** 执行操作* */private static void doExecute(WebDriver dirver) {//导航到百度dirver.get("http://www.baidu.com");//导航到搜狗dirver.navigate().to("https://www.sogou.com");//导航后退dirver.navigate().back();//导航前进dirver.navigate().forward();//导航刷新dirver.navigate().refresh();}/*** 打开火狐浏览器*/private static WebDriver openFirFox() {// geckodriver 下载地址: https://github.com/mozilla/geckodriverSystem.setProperty("webdriver.gecko.driver", "D:\\DevelopSoftware\\geckodriver-v0.23.0-win64\\geckodriver.exe");// 读取获取浏览器二进制文件System.setProperty("webdriver.firefox.bin", "D:\\应用\\FoxMail\\firefox.exe");WebDriver dirver = new FirefoxDriver();return dirver;}}
    
  8. 操作cookie

     import java.util.Set;import org.openqa.selenium.Cookie;import org.openqa.selenium.WebDriver;import org.openqa.selenium.firefox.FirefoxDriver;/*** 操作cookie*/public class Demo_08 {public static void main(String[] args) {// 打开浏览器WebDriver dirver = openFirFox();// 执行操作doExecute(dirver);}/*** 执行操作*/private static void doExecute(WebDriver dirver) {dirver.get("http://www.baidu.com");// 添加cookieCookie addCookie = new Cookie("outman", "1317361873dfdfv");dirver.manage().addCookie(addCookie);// 得到所有的cookieSet<Cookie> cookies = dirver.manage().getCookies();for(Cookie cookie : cookies) {System.out.println("cookie:"+cookie);}System.out.println("所有cookie:"+cookies);// 根据名字获取cookieCookie outman = dirver.manage().getCookieNamed("outman");System.out.println("outman的cookie:"+outman);// 根据name删除cookie dirver.manage().deleteCookieNamed("outman");Cookie outman2 = dirver.manage().getCookieNamed("outman");System.out.println("outman的cookie:"+outman2);// 删除指定的cookiedirver.manage().deleteCookie(new Cookie("outman" , ""));Cookie outman3 = dirver.manage().getCookieNamed("outman");System.out.println("outman的cookie:"+outman3);// 删除所有cookiedirver.manage().deleteAllCookies();Set<Cookie> cookies2 = dirver.manage().getCookies();System.out.println("所有cookie:"+cookies2);}/*** 打开火狐浏览器*/private static WebDriver openFirFox() {// geckodriver 下载地址: https://github.com/mozilla/geckodriverSystem.setProperty("webdriver.gecko.driver", "D:\\DevelopSoftware\\geckodriver-v0.23.0-win64\\geckodriver.exe");// 读取获取浏览器二进制文件System.setProperty("webdriver.firefox.bin", "D:\\应用\\FoxMail\\firefox.exe");WebDriver dirver = new FirefoxDriver();return dirver;}}
    
  9. 高级用户接口

     import org.openqa.selenium.By;import org.openqa.selenium.Keys;import org.openqa.selenium.WebDriver;import org.openqa.selenium.WebElement;import org.openqa.selenium.firefox.FirefoxDriver;import org.openqa.selenium.interactions.Actions;/*** 高级用户接口* * @author outman* @dete 2018-11-07*/public class Demo_09 {public static void main(String[] args) {// 打开浏览器WebDriver dirver = openFirFox();// 执行操作doExecute(dirver);}/*** 执行操作*/private static void doExecute(WebDriver dirver) {dirver.get("http://www.baidu.com");Actions action = new Actions(dirver);WebElement trnews = dirver.findElement(By.name("tj_trnews"));WebElement trxueshu = dirver.findElement(By.name("tj_trxueshu"));WebElement kw = dirver.findElement(By.id("kw"));// perform() 方法为整个动作完成之后的提交操作// 移动鼠标至某个dom元素   (选中页面   新闻)//      action.moveToElement(trnews).perform();// 鼠标点击元素//      action.click(trnews).perform();// 鼠标点击并悬停//     action.clickAndHold(trnews).perform();// 在指定元素上点击右键//       action.contextClick(trnews).perform();// 在指定元素上双击//     action.doubleClick(trnews).perform();// 点击并拖拽  (将资源拖到 指定元素 , 或指定位置)//      action.dragAndDrop(trnews , trxueshu).perform();//      action.dragAndDropBy(trnews, 100, 100).perform();;// 键盘按下//     action.keyDown(Keys.ENTER).perform();// 键盘按键抬起//        action.keyUp(Keys.ENTER).perform();// 将光标移动至指定位置//      action.moveByOffset(100, 100).perform();// 暂停指定的时间for(int i = 0 ; i<10 ;i++) {kw.sendKeys(i+"");action.pause(1000).perform();}// 释放鼠标action.release().perform();}/*** 打开火狐浏览器*/private static WebDriver openFirFox() {// geckodriver 下载地址: https://github.com/mozilla/geckodriverSystem.setProperty("webdriver.gecko.driver", "D:\\DevelopSoftware\\geckodriver-v0.23.0-win64\\geckodriver.exe");// 读取获取浏览器二进制文件System.setProperty("webdriver.firefox.bin", "D:\\应用\\FoxMail\\firefox.exe");WebDriver dirver = new FirefoxDriver();return dirver;}}
    
  10. 操作等待

    import java.util.concurrent.TimeUnit;import org.openqa.selenium.By;
    import org.openqa.selenium.WebDriver;
    import org.openqa.selenium.WebElement;
    import org.openqa.selenium.firefox.FirefoxDriver;
    import org.openqa.selenium.support.ui.ExpectedCondition;
    import org.openqa.selenium.support.ui.WebDriverWait;/*** 操作等待* @author outman* @date 2018-11-07* */
    public class Demo_10 {public static void main(String[] args) {// 打开浏览器WebDriver dirver = openFirFox();// 执行操作doExecute(dirver);}/*** 执行操作* */private static void doExecute(WebDriver driver) {// 显式等待driver.get("http://www.baidu.com");WebElement kw = driver.findElement(By.id("kw"));kw.sendKeys("webDriver");//      显式等待 针对单个元素   隐式等待针对整个页面
    //       最大超时时间是10秒
    //       默认每隔500毫秒扫描一次  如果检测到结果则返回WebDriverWait wait = new WebDriverWait(driver, 10, 1);//获取第一条结果WebElement resultOne = wait.until(new ExpectedCondition<WebElement>() {public WebElement apply(WebDriver driver) {return driver.findElement(By.id("1"));}}).findElement(By.tagName("h3")).findElement(By.tagName("a"));System.out.println(resultOne.getText());resultOne.click();//隐式等待//设置页面加载时间最大为10秒
    //      driver.manage().timeouts().pageLoadTimeout(10, TimeUnit.SECONDS);
    //      driver.get("http://www.baidu.com");
    //
    //      //定位对象设置10秒超时时间  , 10秒还定位不到则抛出异常
    //      driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);
    //      WebElement kw = driver.findElement(By.id("kw"));
    //
    //      //异步脚本执行超时时间设置为3秒
    //      driver.manage().timeouts().setScriptTimeout(1, TimeUnit.SECONDS);}/*** 打开火狐浏览器*/private static WebDriver openFirFox() {// geckodriver 下载地址: https://github.com/mozilla/geckodriverSystem.setProperty("webdriver.gecko.driver", "D:\\DevelopSoftware\\geckodriver-v0.23.0-win64\\geckodriver.exe");// 读取获取浏览器二进制文件System.setProperty("webdriver.firefox.bin", "D:\\应用\\FoxMail\\firefox.exe");WebDriver dirver = new FirefoxDriver();return dirver;}
    }
    
  11. 执行js脚本

    // 创建js 执行对象
    JavascriptExecutor jsExceut = (JavascriptExecutor) dirver;
    // 导航到百度
    dirver.get("http://www.baidu.com");// 创建多个窗口
    String js = "window.open(\"https://www.sogou.com\");";
    String js2 = "window.open(\"http://www.w3school.com.cn/xpath/xpath_syntax.asp\");";// 当只传入js脚本时 , 默认执行该js 的对象时浏览器
    jsExceut.executeScript(js);
    jsExceut.executeScript(js2);
    
  12. 同时启动多个测试

    1. 主类

       import org.openqa.selenium.By;import org.openqa.selenium.WebDriver;import org.openqa.selenium.WebElement;import org.openqa.selenium.support.ui.ExpectedCondition;import org.openqa.selenium.support.ui.WebDriverWait;/*** 同时启动多个浏览器执行测试*/public class Demo_11 {public static void main(String[] args) {for (int i = 0; i < 5; i++) {new Thread(new Runnable() {public void run() {new Demo_11FirFox().doExecute();}}).start();new Thread(new Runnable() {public void run() {new Demo_11IE().doExecute();}}).start();new Thread(new Runnable() {public void run() {new Demo_11Chrome().doExecute();}}).start();}}public void doExecute(WebDriver driver) {driver.get("http://www.baidu.com");WebElement sbtn = driver.findElement(By.id("kw"));sbtn.sendKeys("webDriver");WebDriverWait wait = new WebDriverWait(driver, 10, 1);WebElement resultOne = wait.until(new ExpectedCondition<WebElement>() {public WebElement apply(WebDriver input) {return input.findElement(By.id("1"));}}).findElement(By.tagName("h3")).findElement(By.tagName("a"));// 点击第一条resultOne.click();}}
      
    2. 谷歌浏览器测试类

       import org.openqa.selenium.WebDriver;import org.openqa.selenium.chrome.ChromeDriver;public class Demo_11Chrome extends Demo_11 {public  WebDriver driver = null;public Demo_11Chrome() {System.setProperty("webdriver.chrome.driver","D:\\DevelopSoftware\\chromedriver_win32\\chromedriver.exe");driver = new ChromeDriver();}public void doExecute() {super.doExecute(driver);}}
      
    3. 火狐浏览器测试类

       import org.openqa.selenium.WebDriver;import org.openqa.selenium.firefox.FirefoxDriver;public class Demo_11FirFox extends Demo_11 {private WebDriver driver = null;public Demo_11FirFox() {System.setProperty("webdriver.gecko.driver", "D:\\DevelopSoftware\\geckodriver-v0.23.0-win64\\geckodriver.exe");//读取获取浏览器二进制文件System.setProperty("webdriver.firefox.bin", "D:\\应用\\FoxMail\\firefox.exe");driver = new FirefoxDriver();}public void doExecute() {super.doExecute(driver);}}
      
    4. IE浏览器测试类

       import org.openqa.selenium.WebDriver;import org.openqa.selenium.ie.InternetExplorerDriver;public class Demo_11IE extends Demo_11 {private WebDriver driver = null;public Demo_11IE() {System.setProperty("webdriver.ie.driver","D:\\DevelopSoftware\\IEDriverServer_x64_3.141.0\\IEDriverServer.exe");driver = new InternetExplorerDriver();}public void doExecute() {super.doExecute(driver);}}
      

WebDriver自动化测试框架详解相关推荐

  1. pytest自动化测试框架详解+mark标记+fixture夹具

    介绍 pytest是python的一种单元测试框架,同自带unittest框架类似,功能,效率更强大 特点: 1. 非常容易上手,入门简单,丰富的文档 2. 支持参数化 3. 执行测试用例的过程中,跳 ...

  2. (原创)Python 自动化测试框架详解

    自己折腾了一个python的自动化测试框架,梳理了一下流程,简单分享一下. 项目背景 B/S架构,进行用户界面的自动化测试 工具选择 python开发的自动化测试框架,足够灵活,可以随时根据需求进行变 ...

  3. selenium-python自动化测试框架详解

    自动化测试框架 项目自动化测试框架设计为4层 1.基础层(通用层) 基础层: 将通用,重复性比较高的代码封装到这里. 写通用的代码的. 其他3层想要的话,就可以直接调用. 例如: 读取测试数据的代码, ...

  4. 自动化测试框架详解【2022】

    测试技术的发展 互联网发展风起云涌的几十年,背后是计算机技术的更新迭代,软件开发经历了c.php.java.python.go等语言百家争鸣,在软件测试领域同样是长江后浪推前浪,白盒.自动化.持续集成 ...

  5. 【腾讯优测月刊】安卓主流自动化测试框架详解与实践

    导语: 随着移动应用发布周期越来越紧凑.安卓品牌机型/屏幕/系统版本等碎片化日益严重,移动测试工程师的工作量日益剧增.自动化测试or手工测试?这个前些年争执不休的话题,近年来随着云测试平台的崛起似乎已 ...

  6. uft怎么做app自动化测试_UFT/QTP自动化测试框架详解

    前言 很多从事测试的朋友都会接触到自动化测试或要求有自动化测试的技能,自动化测试已成为测试行业发展的趋势.自动化测试的工具有很多且各有所长,UFT(QTP)是最流行的测试工具之一,因此很多公司在招聘时 ...

  7. python+selenium自动化测试框架详解,我就讲一遍

    目录 前言 1.测试框架分层设计 2.测试框架目录结构 3.编写用例方法 4.测试结果展示 前言 本文整理归纳以往的工作中用到的东西,现汇总成基础测试框架提供分享. 框架采用python3 + sel ...

  8. TestNG自动化测试框架详解

    TestNG 文章目录 TestNG 一.概述与使用 1.1 配置环境 1.2 测试方法 1.3 使用xml文件 二.测试方法常用注解 2.1 配置类注解 2.2 非配置类注解 2.2.1 @Para ...

  9. Django REST FRAMEWORK swagger(一)框架详解

    Django REST FRAMEWORK swagger(一.框架详解) 一.Django REST  SWAGGER框架图 具体见下图 二.说明 RESTFul说明 每一个URI代表一种资源: 客 ...

最新文章

  1. java11开源中国,Java 11 正式发布!
  2. 百词斩和扇贝打卡测试与评估
  3. 你一写长文章就焦虑拖延?
  4. Spark SQL(二)之DataSet操作
  5. 表必须要有主键吗_玄关隔断什么材质好?玄关隔断必须要做吗?
  6. 从零开始学PowerShell(8)创建一个进度条
  7. *推荐* 杏雨梨云U盘系统2011 全面加速 [2010.12.28]
  8. python 数据结构面试_【Python排序面试题】面试问题:所谓数据结构,… - 看准网...
  9. 关于socket的简单的客户服务端编程
  10. 鼎捷软件易飞9.0ERP操作手册
  11. 图像处理中饱和度、色调、对比度的定义
  12. matlab中polyfit和polyval的使用(曲线拟合/多项式拟合/指数拟合)
  13. 全球高效能人士给青年的50个忠告(上)
  14. 建广数科(文思海辉)招聘
  15. 解密为何 Golang 能从众多语言中脱颖而出
  16. R数据分析:如何在R中使用mutate
  17. UVa 1645 - Count(递推)
  18. 【已解决】部分安卓手机,部分ios机型,调微信的jssdk方法失败
  19. 进程三态与五态是什么?
  20. Android系统OTA升级

热门文章

  1. WebStorm For Mac下载及破解方法
  2. TOMCAT虚拟路径配置
  3. 我所遭遇过的游戏中间件---HumanIK
  4. 文件服务器冷热数据划分,游戏服务器冷热数据分离方案
  5. java mapper.readtree_Java ObjectMapper.readTree方法代码示例
  6. ajax请求获取服务器数据,jquery.ajax发布从app引擎服务器获取数据的请求
  7. matlab and操作,系统建模 | Control Tutorials for Matlab and Simulink
  8. Java黑皮书课后题第4章:*4.23(金融应用:酬金)编写一个程序,读取下面信息,然后输出一个酬金声明
  9. 获取界面url_PHP调用百度地图接口,根据IP地址获取地区
  10. oracle数据转成sqlserver,oracle数据库转换到Sqlserver的几点经验