Selenium页面对象+数据驱动测试框架

工程的目录结构:

pom.xml文件:

<?xml version="1.0" encoding="UTF-8"?><project xmlns="http://maven.apache.org/POM/4.0.0"         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">    <modelVersion>4.0.0</modelVersion>

<groupId>shanghai</groupId>    <artifactId>frame</artifactId>    <version>1.0-SNAPSHOT</version>

<dependencies>        <dependency>            <groupId>org.testng</groupId>            <artifactId>testng</artifactId>            <version>6.11</version>        </dependency>

<dependency>            <groupId>org.seleniumhq.selenium</groupId>            <artifactId>selenium-java</artifactId>            <version>3.8.1</version>        </dependency>

<dependency>            <groupId>org.uncommons</groupId>            <artifactId>reportng</artifactId>            <version>1.1.4</version>            <scope>test</scope>            <exclusions>                <exclusion>                    <groupId>org.testng</groupId>                    <artifactId>testng</artifactId>                </exclusion>            </exclusions>        </dependency>

<dependency>            <groupId>com.google.inject</groupId>            <artifactId>guice</artifactId>            <version>4.1.0</version>            <scope>test</scope>        </dependency>    </dependencies>

<build>        <plugins>            <plugin>                <groupId>org.apache.maven.plugins</groupId>                <artifactId>maven-surefire-plugin</artifactId>                <version>2.20.1</version>                <configuration>                    <testFailureIgnore>true</testFailureIgnore>                    <suiteXmlFiles>                        <suiteXmlFile>testng.xml</suiteXmlFile>                    </suiteXmlFiles>                </configuration>            </plugin>            <plugin>                <groupId>org.apache.maven.plugins</groupId>                <artifactId>maven-compiler-plugin</artifactId>                <version>3.7.0</version>                <configuration>                    <source>1.8</source>                    <target>1.8</target>                </configuration>            </plugin>        </plugins>    </build>

</project>

textng.xml文件:
<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd">

<suite name="百度搜索的测试套件">

<test verbose="2" preserve-order="true" name="百度搜索">        <classes>            <class name="BaiduSearchCase" />        </classes>    </test>

<listeners>        <listener class-name="org.uncommons.reportng.HTMLReporter" />        <listener class-name="org.uncommons.reportng.JUnitXMLReporter" />    </listeners>

</suite>

页面对象:
import org.openqa.selenium.WebDriver;import org.openqa.selenium.WebElement;import org.openqa.selenium.firefox.FirefoxDriver;import org.openqa.selenium.support.FindBy;import org.openqa.selenium.support.PageFactory;

public class PageObject {    //页面对象

@FindBy(xpath = ".//*[@id=‘kw‘]")    private WebElement inputBox;    //输入框

@FindBy(xpath = ".//*[@id=‘su‘]")    private WebElement searchButton;    //搜索按钮

@FindBy(xpath = ".//*[@id=‘1‘]/h3/a")    private WebElement searchResult;    //搜索结果第一行

private String baiduUrl = "https://www.baidu.com/";    //百度首页

private WebDriver driver;

public PageObject(){        //构造函数,生成浏览器对象,初始化PageFactory对象        System.setProperty("webdriver.firefox.marionette",                "src/main/resourcec/geckodriver.exe");        driver = new FirefoxDriver();        PageFactory.initElements(driver, this);        driver.manage().window().maximize();    }

public void open(){        //打开百度        String baiduUrl = "https://www.baidu.com/";        driver.get(baiduUrl);    }

public void refresh(){        //刷新浏览器        driver.navigate().refresh();    }

public void quit(){        //退出浏览器        driver.close();        driver.quit();    }

public void search(String value){        //输入并搜索        inputBox.clear();        inputBox.sendKeys(value);        searchButton.click();    }

public String text(){        //获取搜索结果第一行的文本        return searchResult.getText();    }

}

读取Csv文件的工具类:
import java.io.BufferedReader;import java.io.FileInputStream;import java.io.IOException;import java.io.InputStreamReader;import java.util.ArrayList;import java.util.List;

public class ReadCSV {

public static Object [][] readCSV(String fileName)             throws IOException {        //读取CSV文件的方法        List<Object[]> records = new ArrayList<Object[]>();        String record;        BufferedReader file = new BufferedReader(                new InputStreamReader(                        new FileInputStream(fileName),                "UTF-8"));        file.readLine();        while ((record=file.readLine())!=null){            String fields[] =  record.split(",");            records.add(fields);        }        file.close();

Object[][] results = new Object[records.size()][];        for (int i=0; i<records.size();i++){            results[i] = records.get(i);        }        return results;    }

}

Csv文件:


关键字 预期的搜索结果 测试用例的名称中国,中国_百度百科,百度搜索中国的测试用例美国,美国_百度百科,百度搜索美国的测试用例英国,英国_百度百科,百度搜索英国的测试用例法国,法国_百度百科,百度搜索法国的测试用例

测试用例:
import org.testng.Assert;import org.testng.Reporter;import org.testng.annotations.AfterClass;import org.testng.annotations.BeforeClass;import org.testng.annotations.DataProvider;import org.testng.annotations.Test;

import java.io.IOException;

public class BaiduSearchCase {

private PageObject pageObject = new PageObject();

@BeforeClass    public void beforeClass() throws InterruptedException {        pageObject.open();        Thread.sleep(2000);    }

@Test(dataProvider = "keyword")    //百度搜索的测试用例    public void baiduSearchCase(String word, String result, String case_1)            throws InterruptedException {        pageObject.search(word);        Thread.sleep(2000);        Assert.assertEquals(pageObject.text(), result);        Reporter.log(case_1);        pageObject.refresh();        Thread.sleep(2000);    }

@AfterClass    public void afterClass(){        pageObject.quit();    }

@DataProvider(name = "keyword")    public Object[][] dp() throws IOException {        return ReadCSV.readCSV("src/main/resources/keyword.csv");    }

}

测试报告:

原文地址:https://www.cnblogs.com/yjlch1016/p/8328282.html

时间: 2024-08-29 01:40:26

Selenium页面对象+数据驱动测试框架的相关文章

python webdriver 一步一步搭建数据驱动测试框架的过程和总结

一步一步搭建数据驱动测试框架的过程和总结数据驱动框架结构:Action:    封装的操作元素的函数,如login,添加联系人... conf:日志配置文件定位元素配置文件数据库配置文件    PageObject:    一个页面是一个类,类的方法可以获取页面上的相关元素 ProjectVar:工程路径工程相关的全局变量TestData:(文件或excel)测试用例测试数据 TestScript:运行测试框架的主程序:入口,主要读取测试数据的文件                      记录

selenium学习:数据驱动测试实例之参数化51cto登录

封装模块文件public_1.py #coding=utf-8 from selenium import webdriver from time import sleep class Login():              #登陆     def user_login(self,driver,username,password):         driver.find_element_by_id("loginform-username").clear()         driv

快速教你如何搭建数据驱动自动化测试框架?

前言 说到数据驱动自动化测试,你会不会有这样的疑问:数据怎么管理?数据怎么才能驱动测试用例执行?到底怎么样才算数据驱动?那么本篇文章就教你如何进行数据驱动测试,相信你一定能对数据驱动自动化测试有一个不一样的理解,希望这篇文章能帮助还在懵懵懂懂的你了解数据驱动测试,如何来做数据驱动测试?那么就跟上我的脚步吧^_^ 项目介绍 地址:https://www.126.com/ 1.实现126邮箱登录功能的验证 2.实现126邮箱添加新联系人功能的验证 框架分析 1.新建config目录存放和业务无关的数

测试框架

什么是测试框架 测试框架是一组自动化测试的规范.测试脚本的基础代码,以及测试思想.惯例的集合.可用于减少冗余代码.提高代码生产率.提高代码重用性和可维护性.测试框架出现的最终目的是花少量的资源来完成尽可能多的测试任务,所以测试框架的建立以及框架的重用性方面是最值得测试人员深入探究的地方. 测试框架的好处 提高开发速度 提升测试代码的执行效率 提高软件代码质量,同时引入重构概念,让代码更干净和富有弹性 提升系统的可信赖度,作为回归测试的一种实现方法支持修复后“再测试”,确保代码的正确性. 测试框架

软件测试第三周——测试框架

首先,先来了解一下测试框架 测试框架的属性: 1. 测试框架是测试开发过程中提取特定领域测试方法共性部分形成的体系结构 2. 测试框架的作用:在其基础上重用测试设计原则和测试经验,调整部分内容便可满足需求,可提高测试用例设计开发质量,降低成本,缩短时间 3.测试框架类型根据测试领域不同而改变 4.测试框架是一个半成品,需要测试工程师基于它转化成自己的测试用例: 5.测试框架是提供给测试人员开发相应领域测试用例的测试分析设计工具 6.测试框架不是测试用例集,而是通用的,具有一般性的系统主体部分.测

selenium测试框架篇,页面对象和元素对象的管理

前期已经做好使用Jenkins做buildhttp://www.cnblogs.com/tobecrazy/p/4529399.html 做自动化框架,不可避免的就是对象库. 有一个好的对象库,可以让整个测试体系: 更容易维护 大大增加代码重用 增加测试系统的稳定性 这里先了解一下我所说的对象库: 所谓的页面对象,是指每一个真是的页面是一个对象. 比如zhihu的登陆页面是一个页面对象,http://www.zhihu.com/#signin 这个页面对象主要包含一个输入邮箱的输入框(一个元素对

selenium测试框架使用xml作为对象库

之前已经写过一篇: selenium测试框架篇,页面对象和元素对象的管理 上次使用的excel作为Locator对象管理,由于excel处理不够方便,有以下缺点: 不能实现分page 加载Locator对象 不能够实现Locator对象重名 文件比较大,读写速度没有xml快 所以,重新写了使用dom4j操作xml,使用xml管理Locator对象,能够有效解决以上问题 首先,定义Locator文件 <?xml version="1.0" encoding="UTF-8&

selenium测试框架篇

做自动化框架,不可避免的就是对象库. 有一个好的对象库,可以让整个测试体系: 更容易维护 大大增加代码重用 增加测试系统的稳定性 这里先了解一下我所说的对象库: 所谓的页面对象,是指每一个真是的页面是一个对象. 比如zhihu的登陆页面是一个页面对象,http://www.zhihu.com/#signin 这个页面对象主要包含一个输入邮箱的输入框(一个元素对象),一个输入密码的密码框 一个登陆框.当然,zhihu不止一个页面,有无数页面,每一个页面都可以封装为一个对象.而每个 页面的元素,也可

selenium测试框架(java) 版本演化一

selenium的自动化测试代码应该如何组织?  如链接:https://code.google.com/p/selenium/wiki/PageObjects  这里提供了一种PageObject的设计思想,并且在百度内部给出了一个感觉比较实用的实现.其组织结构思想如下: Page 封装页面元素,以及页面应提供的服务. 尽量隐藏页面的细节,不要暴露出来. widget 封装Page中的通用的组件. 这里的理念是所有的WebElement都是控件. 通用的页面样式,如导航栏,列表,组合查询框,可