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

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

  • 相关阅读:
    【IHttpHandler】在ASP.Net2.0中使用UrlRewritingNet实现链接重写
    【IHttpHandler】IHttpModule实现URL重写
    【IHttpHandler】使用IHttpHandler防盗链
    【IHttpHandler】HttpModule,HttpHandler,HttpHandlerFactory简单使用
    【IHttpHandler】HttpModule的认识
    【IHttpHandler】了解 IHttpHandler
    【MVC】ASP.NET MVC 请求生命周期
    【MVC】ASP.NET MVC HtmlHelper用法大全
    【MVC】ASP.NET MVC中实现多个按钮提交的几种方法
    【MVC】自定义ASP.NET MVC Html辅助方法
  • 原文地址:https://www.cnblogs.com/taoSir/p/4819430.html
Copyright © 2020-2023  润新知