自动化脚本

作者: 梵音11 | 来源:发表于2020-07-09 22:08 被阅读0次

    使用selenium编写一个能操作浏览器的脚本是非常容易的,而简单线性脚本的编写是下一步编写页面对象脚本的基础。

    一、自动化测试,一般分三个步骤

    1)取预期结果

    2)取实际结果

    3)断言:比较1)和2)来判断测试是否通过;

    selenium自动化测试,在自动化测试里也是属于超级 简单 的一类。但前提是必须理解上面说的自动化测试原理,以及其他一些自动化测试设计原则。否则,我们将会看到, 简单的项目也会失败 。有很多由初、中级开发人员或会一点点代码的测试人员编写的selenium自动化测试项目,因此失败。

    二、简单的selenium测试脚本编写,一般也是分三个步骤

    1)定位一个元素

    2)操作一个元素

    3)断言

    好,这里用百度首页的搜索做一个例子:

    1 package simplewebtest.test;

    2

    3 import java.util.concurrent.TimeUnit;

    4

    5 import org.openqa.selenium.By;

    6 import org.openqa.selenium.WebDriver;

    7 import org.openqa.selenium.firefox.FirefoxDriver;

    8 import org.testng.annotations.Test;

    9

    10 public class TestBaiduHome {

    11   

    12    @Test

    13    public void searchSomething(){

    14

    15        WebDriver driver=new FirefoxDriver();//打开Firefox; open firefox

    16        driver.get("http://www.baidu.com");//打开百度open the url

    17        driver.findElement(By.id("kw1")).sendKeys("GitHub");//输入搜索关键字“GitHub";input search keyword

    18        driver.findElement(By.id("su1")).click();//点击搜索按钮click the search button

    19        driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);//等页面加载,10秒内不加载成功即报超时。waiting for 10 seconds                       

    20        String aResult=driver.findElement(By.xpath(".//*[@id='4']/h3/a")).getText();//取第四条搜索结果的标题。 get the text of 4th search result

    21        assert aResult.contains("GitHub");//做断言 assertion

    22        driver.findElement(By.xpath(".//*[@id='4']/h3/a")).click();//打开第四个搜索结果。Open the 4th search result on baidu

    23        driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);//等页面加载,10秒内不加载成功即报超时。waiting for 10 seconds                       

    24       

    25        //获取所有窗口的handle,然后逐个切换,直到切换到最新窗口 switch to the new window

    26        for(String winHandle : driver.getWindowHandles()){   

    27            driver.switchTo().window(winHandle);   

    28            }   

    29       

    30        String aTitle=driver.getTitle();//取新窗口的title

    31        System.out.println("current widnow title is:"+aTitle);//打出来看看

    32        assert aTitle.contains("GitHub");//断言

    33       

    34    }

    35 }

    View Code

    本系列所有代码https://github.com/zhangting85/simpleWebtest,

    这个例子存放在src/test/java/simplewebtest/test/TestBaiduHome.java

    下面逐行解释:

    WebDriver driver=new FirefoxDriver();

    这里是声明了一个 WebDriver 类型的对象引用,我给他起名叫driver;

    然后让这个driver指向WebDriver的一个子类(FirefoxDriver)的对象;

    我们知道FirefoxDriver继承自WebDriver,IEDriver也继承自WebDriver;

    就像苹果继承自水果,橘子也继承自水果;

    这里用了Java的向上转型,使用子类的对象来初始化父类的引用。(注:实际上Webdriver是一个接口。)

    这将产生什么效果呢?

    我们在driver上调用方法的时候,都是先查找WebDriver里的方法定义,然后jvm去他的子类比如FirfoxDriver中找到其在子类中的实现,再执行的。比如FirefoxDriver的get方法和IEDriver的get方法,他们具体执行的代码内容明显是不一样的。但我们的脚本,只要改变driver引用的子类,而不用改变我后面的方法调用。

    也就是说,我们用firefox和用ie,除了第一句话新建对象时不一样,后面的方法调用都是一样的。

    java会自动根据我们上面这句话里创建的对象,去选择他应该执行的实际代码。

    这也就是JAVA里的多态,一句话记住多态:用子类对象初始化父类引用,方法调用时自动执行子类代码,成员变量调用时自动调用父类成员变量。

    以上,题外话略多,是希望测试人员不要自我放弃,写个程序不会有多难,Java的基础必须要掌握。

    driver.get("http://www.baidu.com");

    调用Webdriver的get方法,跳转到制定的URL;

    凡是这里跳转不过去的,十有八九是因为webdriver版本太低,浏览器版本太高,请改上一节讲的pom.xml里配置的webdriver版本号至最新版。

    driver.findElement(By.id("kw1")).sendKeys("GitHub");//输入搜索关键字“GitHub";input search keyword

    driver.findElement(By.id("su1")).click();//点击搜索按钮click the search button

    这里调用Webdriver的findElement方法来查找页面元素。然后在找到的页面元素WebElement对象上调用sendKeys方法来打字和click方法来点击。

    如果你问我这个id的值是怎么来的,那么你可以去看一下FireBug这个插件,他会替你找到每一个元素的一切属性。

    如果你要定位的元素没有id,你还可以用className,Xpath,css,等等来定位。

    另一个插件FirePath可以帮你产生任意元素的xpath表达式。

    findElement方法需要一个By类型的参数

    创建了一个测试交流群,如果对软件测试、接口测试、自动化测试、面试经验交流感兴趣可以加测试交流群:829792258,还会有同行一起技术交流

    相关文章

      网友评论

        本文标题:自动化脚本

        本文链接:https://www.haomeiwen.com/subject/nfyecktx.html