zoukankan      html  css  js  c++  java
  • Selenium的自我总结1

           搞了一段时间的Selenium Web的自动化,针对项目要搭建了一套适合项目的测试框架(Selenium[POM/DataDriver]+TestNG+Ant+Jenkins)。在最开始看Selenium的时候也是满论坛的找资料学习,现在总是在想能不能搞一些适合新手入门的东西出来,当然个人能力也是有限的,只能尝试着去整理,也算是对自己学习过程的一个总结吧。下面的内容都是自己经验性的总结,有不对的地方欢迎大家拍砖,也算是共同学习共同进步啊。。。

        Selenium是什么?

        关于Selenium的介绍网上一大堆,我也不在这里复制粘贴了。我理解的简单一句话,“Selenium就是适合于Web测试的一个框架”,支持多语言(Java、Python、C#、Ruby等等),跨平台,多浏览器等等特性。为大家实现Web自动化测试多了一条路来选择。在这里多插一句话,自动化测试代替不了手工测试,只有你了解产品的需求才能写出完善的自动化测试脚本,还有如果想了解一样东西,官网还是最牛逼的地方,由于长城防火墙的存在,所以。。。懂的啊,我这边下载了线下的官方文档,地址为:http://pan.baidu.com/s/12pX9O

    好了,我也不墨迹了,整理整理干货吧,这个才是重点。

        浏览器的选择

    我们也知道了,Selenium是支持多浏览器的,这里我就暂时先说说几种在Windows下常用的浏览器(IE、Firefox、Chrome),由于Firefox是Selenium原生支持的浏览器,所以会少一些步骤,不多说了,直接上代码:

    //Firefox安装在默认路径下时,下面就能将Firefox启动起来
    Webdriver driver = new FirefoxDriver();
    
    //Firefox如果没有安装默认路径下,这个时候需要首先指定Firefox安装的路径
    System.setProperty("webdriver.firefox.driver","Path of firefox\\firefox.exe");
    Webdriver driver = new FirefoxDriver();
    
    //对于IE浏览器,首先得下载IEDriver的插件
    System.setProperty("webdriver.ie.driver", "Path of location\IEDriverServer.exe");
    Webdriver  driver = new InternetExplorerDriver();
    
    //对于Chrome浏览器,也一样首先需要下载chrome插件
    System.setProperty("webdriver.chrome.driver","path of location\chromedriver.exe");
    Webdriver driver = new ChromeDriver();

       打开指定的网页

    打开具体的网站进行测试,

    WebDriver driver = new FirefoxDriver();
    
    //打开网页的第一种方式,创建一个Navigation对象
            
            //创建一个Navigation对象
            Navigation navigation = driver.navigate();
            //前往百度首页
            navigation.to("http://www.baidu.com/");
            //刷新当前页面
            navigation.refresh();
            //返回之前的页面
            navigation.back();
            
    //打开某个网页的第二种方式,
            
            driver.get(http://www.baidu.com/);

    查找定位对象元素

    不管你在Web页面做什么操作,首先我们得定位到这个元素对象,在Selenium提供的API中提供了一个By的对象类,这样我们通过条件对象“By”就能对元素对象进行定位。那么首先我们得了解下Selenium给我们提供了下面8种定位元素的方法:

    1. By.className("className"); //通过HTML 中的class来定位到指定的元素
    2. By.cssSelector("cssPath"); //通过css路径来定位指定的元素,接下来有时间可以总结下关于cssPath和xpath的定位
    3. By.id("idName"); //通过HTML的ID来定位到指定的元素
    4. By.linkText("linkText"); //通过HTML中链接文本来进行链接
    5. By.name("name");  //通过HTML中的name元素值来进行定位
    6. By.partialLinkText("partialLinkText");  //通过链接文本的部分值来进行定位
    7. By.tagName("tagName"); //通过HTML中的tag值来进行定位
    8. By.xpath("xpathPath");  //通过xpath来进行定位,

    下面的例子也已百度首页为例子来进行说明。

    比如定位百度搜索的输入框(火狐上可以下载两个插件工具,FireBug+FirePath,来帮助定位元素)

    bd1

    输入框元素:

    <input id="kw" class="s_ipt" autocomplete="off" maxlength="255" value="" name="wd"/>

    百度一下按钮元素:

    <input id="su" class="bg s_btn btnhover" type="submit" value="百度一下"/>

    新闻链接元素:

    <a class="mnav" name="tj_trnews" href="http://news.baidu.com">新闻</a>
    WebDriver driver = new FirefoxDriver();driver.get("http://www.baidu.com/");
            By by = null;
            
            //通过ID定位输入框
            WebElement elementInput = driver.findElement(by.id("kw"));
            //通过classname来定位提交按钮元素
            WebElement elementBtn = driver.findElement(by.className("bg s_btn btnhover"));
            //通过linkText来定位右上方的“新闻”链接
            WebElement elementLink = driver.findElement(by.linkText("新闻"));
           //通过xpath来定位HAO123链接
            WebElement elementHao123 = driver.findElement(by.xpath(".//*[@id='u1']/a[2]"));
           //通过csspath来定位登陆按钮
            WebElement elementMap = driver.findElement(by.cssSelector(".lb"));

            上面写了几种方式来定位元素,大家感受下这些定位元素的方式,关于xpath和cssSelector的定位,以后有时间在说说。Selenium在这里提供了findElement的方法来方便查找元素。

           就在项目中的感受来讲,如果框架搭建完成以后,定位元素将是一项最大的工程了,所以在这里应该好好看看,方便接下来的学习。

    操作元素以及获取页面相关元素值

            元素我们找到了,接下来我们就应该对我们找到的元素进行操作,那么Selenium又为我们封装了哪些基本的操作方法呢?比如说,我们对元素进行点击,输入框输入值,下拉框选择某个元素等等操作,有时候我们在验证页面是否满足需求的时候,我们也需要获取元素的相关值与预期值来进行比较。

           下面我只是简单的列出一些基本方法来说明一些小问题,让新手有个大概的了解,然后在以具体的页面来进行操作。让大家有个具体清晰的认识

          //清空输入框的内容
            elementInput.clear();
           //输入相关的值
            elementInput.sendKeys("test input text"); 
            //点击按钮
            elementBtn.click();
            //获取文本框的值
            elementBtn.getText();
            //获取到具体的链接地址
            elementHao123.getAttribute("href");

        当然有些时候这些简单的操作是不能完成一些动作的,比如我们移动鼠标到某个元素上:
       

    //创建一个Actions的类,然后根绝要执行的操作进行对应的复杂操作
               Actions action = new Actions(driver);
             action.moveToElement(elementBtn).build().perform();

    警告框的处理

         在操作Web页面的时候,最常见的弹框应该是警告框的弹出,提醒客户同不同意之类的警告框,遇到这种对话框的时候,该如何处理呢?Selenium提供了一个Alert的类,帮助我们来对警告框进行处理。

    //定位到Alert对话框上
            Alert alert = driver.switchTo().alert();
            //获取Alert对话框的内容
            alert.getText();
            //接受警告框的内容,并关闭该对话框
            alert.accept();
            //不同意警告框的内容,并关闭该对话框
            alert.dismiss();

    多对话框的处理

           在很多情况下,我们在打开另一个页面的时候,它是会弹出另外一个新的对话框页面,如何定位到新的对话框上来呢?这个时候出现了一个概念就是对话框的句柄,每个对话框都有一个唯一的标识符那就是句柄,我们可以通过句柄的定位到当前的对话框上。Selenium提供了一个方法,driver.switchTo().window(“valueOfHandle”),通过传入新窗口的句柄从而定位到新的窗口上,然后就能对新窗口进行对应的操作。

     
    //得到当前窗口的句柄
            String currentHandle = driver.getWindowHandle();
            
            //得到所有窗口的句柄
            Set<String> handles = driver.getWindowHandles();
            
            //创建一个迭代器
            Iterator<String> iterator = handles.iterator();
            
            //实现迭代
            while(iterator.hasNext()){
                           
                String handle = iterator.next();
                
                //和当前窗口的句柄作比较,如果和当前窗口句柄相同,就将当前窗口句柄传给Selenium
                if(currentHandle.equals(handle)){
                    
                    driver.switchTo().window(handle);
                    
                    System.out.println("Current Window URL is: " + driver.getCurrentUrl());
                    
                }
                
            }
     

    关闭窗口以及隐性等待时间的操作

    //等待时间的设置,隐性时间的等待设置,是贯穿于这个类的整个生命周期的,不是针对某一点上,在Selenium的操作的过程中,这个等待时间都是生效的
            driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);
            
            //关闭所有窗口
            driver.quit();
            
            //关闭当前定位的窗口
            driver.close();

    今天就到这,后续会针对一个简单的页面,将上面的所有操作汇总下。

  • 相关阅读:
    104.Maximum Depth of Binary Tree
    103.Binary Tree Zigzag Level Order Traversal
    102.Binary Tree Level Order Traversal
    101.Symmetric Tree
    100.Same Tree
    99.Recover Binary Search Tree
    98.Validate Binary Search Tree
    97.Interleaving String
    static静态初始化块
    serialVersionUID作用
  • 原文地址:https://www.cnblogs.com/taoSir/p/4819430.html
Copyright © 2011-2022 走看看