Selenium Webdriver实现BKredcoil website 账户自动登录
来源:互联网 发布:儿童模式软件下载 编辑:程序博客网 时间:2024/06/03 16:24
Selenium Webdriver实现BKredcoil website 账户自动登录(一)
一、项目结构:
(1)base包:用来存放元素对象,将测试的元素对象插入数据库中保存,好用来做为测试用例维护。
ObjectTest.java
- package com.annie.base;
- import java.util.Date;
- public class ObjectTest {
- private int id;
- private String website;
- private String page;
- private String area;
- private String object_type;
- private String object_key_type;
- private String object_pagename;
- private String object_key;
- private String description;
- private String status;
- private Date createtime;
- private String createuser;
- private Date updatetime;
- private String updateuser;
- private Date deletetime;
- private String deleteuser;
- //后面省去get/set方法
- }
package com.annie.base;import java.util.Date;public class ObjectTest {private int id;private String website;private String page;private String area;private String object_type;private String object_key_type;private String object_pagename;private String object_key;private String description;private String status;private Date createtime;private String createuser;private Date updatetime;private String updateuser;private Date deletetime;private String deleteuser;//后面省去get/set方法}(2)util包:用来存放工具类,比如ExelData这样的工具类
(注意1.exel测试数据文档的路径;2.exel测试数据文档名;3.exel测试数据文档的testcase名,即sheet名)
- package com.annie.util;
- import java.io.File;
- import java.util.Iterator;
- import java.util.Map;
- import java.util.TreeMap;
- import java.util.regex.Matcher;
- import jxl.*;
- public class ExcelData implements Iterator<Object[]> {
- private Workbook book = null;
- private Sheet sheet = null;
- private int rowNum = 0;
- private int curRowNo = 0;
- private int columnNum = 0;
- private String[] columnnName;
- public ExcelData(String filepath, String casename) {
- try {
- File directory = new File(".");
- String ss = "open.anniewang.exceldata.";
- book = Workbook.getWorkbook(new File(directory.getCanonicalPath()
- + "\\resources\\"
- + ss.replaceAll("\\.", Matcher.quoteReplacement("\\"))
- + filepath + ".xls"));
- this.sheet = book.getSheet(casename);
- this.rowNum = sheet.getRows();
- Cell[] c = sheet.getRow(0);
- this.columnNum = c.length;
- columnnName = new String[c.length];
- for (int i = 0; i < c.length; i++) {
- columnnName[i] = c[i].getContents().toString();
- }
- this.curRowNo++;
- } catch (Exception e) {
- e.printStackTrace();
- }
- }
- @Override
- public boolean hasNext() {
- if (this.rowNum == 0 || this.curRowNo >= this.rowNum) {
- try {
- book.close();
- } catch (Exception e) {
- e.printStackTrace();
- }
- return false;
- } else
- return true;
- }
- @Override
- public Object[] next() {
- Cell[] c = sheet.getRow(this.curRowNo);
- Map<String, String> s = new TreeMap<String, String>();
- for (int i = 0; i < this.columnNum; i++) {
- String temp = "";
- try {
- temp = c[i].getContents().toString();
- } catch (ArrayIndexOutOfBoundsException ex) {
- temp = "";
- }
- s.put(this.columnnName[i], temp);
- }
- Object r[] = new Object[1];
- r[0] = s;
- this.curRowNo++;
- return r;
- }
- @Override
- public void remove() {
- throw new UnsupportedOperationException("remove unsupported.");
- }
- }
package com.annie.util;import java.io.File;import java.util.Iterator;import java.util.Map;import java.util.TreeMap;import java.util.regex.Matcher;import jxl.*;public class ExcelData implements Iterator<Object[]> {private Workbook book = null;private Sheet sheet = null;private int rowNum = 0;private int curRowNo = 0;private int columnNum = 0;private String[] columnnName;public ExcelData(String filepath, String casename) {try {File directory = new File(".");String ss = "open.anniewang.exceldata.";book = Workbook.getWorkbook(new File(directory.getCanonicalPath()+ "\\resources\\"+ ss.replaceAll("\\.", Matcher.quoteReplacement("\\"))+ filepath + ".xls"));this.sheet = book.getSheet(casename);this.rowNum = sheet.getRows();Cell[] c = sheet.getRow(0);this.columnNum = c.length;columnnName = new String[c.length];for (int i = 0; i < c.length; i++) {columnnName[i] = c[i].getContents().toString();}this.curRowNo++;} catch (Exception e) {e.printStackTrace();}}@Overridepublic boolean hasNext() {if (this.rowNum == 0 || this.curRowNo >= this.rowNum) {try {book.close();} catch (Exception e) {e.printStackTrace();}return false;} elsereturn true;}@Overridepublic Object[] next() {Cell[] c = sheet.getRow(this.curRowNo);Map<String, String> s = new TreeMap<String, String>();for (int i = 0; i < this.columnNum; i++) {String temp = "";try {temp = c[i].getContents().toString();} catch (ArrayIndexOutOfBoundsException ex) {temp = "";}s.put(this.columnnName[i], temp);}Object r[] = new Object[1];r[0] = s;this.curRowNo++;return r;}@Overridepublic void remove() {throw new UnsupportedOperationException("remove unsupported.");}}
(3)testng包:用来存放公共的方法实现“高内聚,低耦合”的初衷(需要后面完善)
- package com.annie.testng;
- import java.util.Iterator;
- import java.util.concurrent.TimeUnit;
- import org.openqa.selenium.By;
- import org.openqa.selenium.WebDriver;
- import org.openqa.selenium.WebElement;
- import org.openqa.selenium.chrome.ChromeDriver;
- import org.openqa.selenium.firefox.FirefoxDriver;
- import org.testng.Assert;
- import org.testng.annotations.BeforeTest;
- import org.testng.annotations.DataProvider;
- import org.testng.annotations.Parameters;
- import org.testng.annotations.Test;
- import com.annie.util.ExcelData;
- ;
- public class TestNG {
- private WebDriver driver;
- @Parameters({ "browser" })
- @BeforeTest
- public void setupBrowser(String browser) {
- if (browser.equals("firefox")) {
- driver = new FirefoxDriver();
- } else {
- driver = new ChromeDriver();
- }
- }
- @Parameters({ "url", "keyword" })
- @Test
- public void search(String url, String keyword) {
- driver.get(url);
- WebElement element = driver.findElement(By.name("q"));
- element.sendKeys(keyword);
- element.submit();
- Assert.assertTrue(driver.getTitle().contains(keyword),
- "Title is wrong!");
- }
- // 传入登录用户名、密码,获取元素,验证空用户/密码登录
- @Parameters({ "url", "login_name_txtUserName", "login_name_txtPwd",
- "login_name_btnLogin" })
- // 参数: URL、用户名name、密码name、登陆按钮name
- @Test(groups = { "login" })
- public void login_username_empty(String login_name_txtUserName,
- String login_name_txtPwd, String login_name_btnLogin)
- throws Exception {
- System.out.print("login_username_empty");
- driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);
- driver.findElement(By.name(login_name_txtUserName)).clear();
- driver.findElement(By.name(login_name_txtPwd)).clear();
- driver.findElement(By.name(login_name_txtUserName)).sendKeys("");
- driver.findElement(By.name(login_name_txtPwd)).sendKeys("");
- driver.quit();
- }
- }
package com.annie.testng;import java.util.Iterator;import java.util.concurrent.TimeUnit;import org.openqa.selenium.By;import org.openqa.selenium.WebDriver;import org.openqa.selenium.WebElement;import org.openqa.selenium.chrome.ChromeDriver;import org.openqa.selenium.firefox.FirefoxDriver;import org.testng.Assert;import org.testng.annotations.BeforeTest;import org.testng.annotations.DataProvider;import org.testng.annotations.Parameters;import org.testng.annotations.Test;import com.annie.util.ExcelData;;public class TestNG {private WebDriver driver;@Parameters({ "browser" })@BeforeTestpublic void setupBrowser(String browser) {if (browser.equals("firefox")) {driver = new FirefoxDriver();} else {driver = new ChromeDriver();}}@Parameters({ "url", "keyword" })@Testpublic void search(String url, String keyword) {driver.get(url);WebElement element = driver.findElement(By.name("q"));element.sendKeys(keyword);element.submit();Assert.assertTrue(driver.getTitle().contains(keyword),"Title is wrong!");}// 传入登录用户名、密码,获取元素,验证空用户/密码登录@Parameters({ "url", "login_name_txtUserName", "login_name_txtPwd","login_name_btnLogin" })// 参数: URL、用户名name、密码name、登陆按钮name@Test(groups = { "login" })public void login_username_empty(String login_name_txtUserName,String login_name_txtPwd, String login_name_btnLogin)throws Exception {System.out.print("login_username_empty");driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);driver.findElement(By.name(login_name_txtUserName)).clear();driver.findElement(By.name(login_name_txtPwd)).clear();driver.findElement(By.name(login_name_txtUserName)).sendKeys("");driver.findElement(By.name(login_name_txtPwd)).sendKeys("");driver.quit();}}
(4)testcase包:用来存放编写的测试用例
LoginTest.java
- package com.annie.testcase;
- import java.util.Iterator;
- import java.util.Map;
- import java.util.Set;
- import java.util.concurrent.TimeUnit;
- import org.openqa.selenium.By;
- import org.openqa.selenium.WebDriver;
- import org.openqa.selenium.firefox.FirefoxDriver;
- import org.testng.annotations.DataProvider;
- import org.testng.annotations.Test;
- import com.annie.testng.TestNG;
- import com.annie.util.ExcelData;
- public class LoginTest {
- private WebDriver driver;
- private String username, password;
- TestNG tn = new TestNG();
- @DataProvider(name = "accounts")
- // 登录用户的账户Excel,返回的是Object数组
- public Iterator<Object[]> data() throws Exception {
- return (Iterator<Object[]>) new ExcelData("accounts_login", "testA");
- }
- public void prmap(Map<String, String> arr) {
- driver = new FirefoxDriver();
- driver.get("http://10.0.0.88:8080/bkredcoil/index.html");
- driver.manage().timeouts().implicitlyWait(500, TimeUnit.SECONDS);
- driver.findElement(By.id("username")).clear();
- driver.findElement(By.id("password")).clear();
- Set<String> set = arr.keySet();
- Iterator<String> it = set.iterator();
- while (it.hasNext()) {
- String s = (String) it.next();
- if (s.equals("Email")) {
- username = arr.get(s);
- } else {
- password = arr.get(s);
- }
- System.out.println(arr.get(s));
- driver.findElement(By.id("username")).sendKeys(username);
- driver.findElement(By.id("password")).sendKeys(password);
- driver.findElement(By.id("btn-login")).click();
- driver.manage().timeouts().implicitlyWait(500, TimeUnit.SECONDS);
- //driver.quit();
- }
- }
- // 写一个类似prmap的方法,将Map类型的exel数据传入,并在指定的URL进行登录,将Map中的Email和password 做参数传入登陆即可
- @Test(dataProvider = "accounts")
- public void ts(Map<String, String> data) throws Exception {
- this.prmap(data);
- // 每次打印一组account,则调用登录用例
- System.out.println("=====over=====");
- System.out.println("");
- }
- }
package com.annie.testcase;import java.util.Iterator;import java.util.Map;import java.util.Set;import java.util.concurrent.TimeUnit;import org.openqa.selenium.By;import org.openqa.selenium.WebDriver;import org.openqa.selenium.firefox.FirefoxDriver;import org.testng.annotations.DataProvider;import org.testng.annotations.Test;import com.annie.testng.TestNG;import com.annie.util.ExcelData;public class LoginTest {private WebDriver driver;private String username, password;TestNG tn = new TestNG();@DataProvider(name = "accounts")// 登录用户的账户Excel,返回的是Object数组public Iterator<Object[]> data() throws Exception {return (Iterator<Object[]>) new ExcelData("accounts_login", "testA");}public void prmap(Map<String, String> arr) {driver = new FirefoxDriver();driver.get("http://10.0.0.88:8080/bkredcoil/index.html");driver.manage().timeouts().implicitlyWait(500, TimeUnit.SECONDS);driver.findElement(By.id("username")).clear();driver.findElement(By.id("password")).clear();Set<String> set = arr.keySet();Iterator<String> it = set.iterator();while (it.hasNext()) {String s = (String) it.next();if (s.equals("Email")) {username = arr.get(s);} else {password = arr.get(s);}System.out.println(arr.get(s));driver.findElement(By.id("username")).sendKeys(username);driver.findElement(By.id("password")).sendKeys(password);driver.findElement(By.id("btn-login")).click();driver.manage().timeouts().implicitlyWait(500, TimeUnit.SECONDS);//driver.quit();}}// 写一个类似prmap的方法,将Map类型的exel数据传入,并在指定的URL进行登录,将Map中的Email和password 做参数传入登陆即可@Test(dataProvider = "accounts")public void ts(Map<String, String> data) throws Exception {this.prmap(data);// 每次打印一组account,则调用登录用例System.out.println("=====over=====");System.out.println("");}}
testng.xml
- <?xml version="1.0" encoding="UTF-8"?>
- <suite name="Suite" parallel="false">
- <test name="LoginTest" preserve-order="true">
- <classes>
- <class name="com.annie.testcase.LoginTest"/>
- </classes>
- </test> <!-- Test -->
- </suite> <!-- Suite -->
<?xml version="1.0" encoding="UTF-8"?><suite name="Suite" parallel="false"> <test name="LoginTest" preserve-order="true"> <classes> <class name="com.annie.testcase.LoginTest"/> </classes> </test> <!-- Test --></suite> <!-- Suite -->build.xml
- <project name="TestNGTest" default="testoutput" basedir=".">
- <!-- Define <testng> task -->
- <taskdef name="testng" classname="org.testng.TestNGAntTask">
- <classpath>
- <pathelement location="lib/testng-6.8.jar" />
- </classpath>
- </taskdef>
- <property name="testoutputdir" location="test-output" />
- <property name="srcdir" location="src" />
- <property name="libdir" location="lib" />
- <property name="full-compile" value="true" />
- <property name="basedir" value="D:/workspace/BKRedcoil_TestCase/" />
- <path id="classpath.test">
- <fileset dir="${libdir}">
- <include name="**/*.jar" />
- </fileset>
- <pathelement location="${testoutputdir}" />
- <pathelement location="${srcdir}" />
- </path>
- <target name="clean">
- <delete dir="${basedir}/bin" />
- </target>
- <target name="compile" depends="clean">
- <mkdir dir="${basedir}/bin" />
- <javac srcdir="${srcdir}" encoding="UTF-8" destdir="${basedir}/bin" verbose="${full-compile}" classpathref="classpath.test" includeantruntime="off" debug="on" debuglevel="lines,vars,source" />
- </target>
- <path id="classes">
- <fileset dir="${libdir}" includes="*jar"/>
- <fileset dir="${libdir}" includes="*zip"/>
- <pathelement location="${basedir}/bin/"/>
- </path>
- <target name="runtest" depends="compile">
- <testng outputdir="${testoutputdir}" classpathref="classes" delegateCommandSystemProperties="true">
- <xmlfileset dir="${srcdir}" includes="testng.xml" />
- </testng>
- </target>
- <target name="testoutput" depends="runtest">
- <xslt in="${testoutputdir}/testng-results.xml" style="${testoutputdir}/testng-results.xsl" out="${testoutputdir}/index.html ">
- <param name="testNgXslt.outputDir" expression="D:/workspace/BKRedcoil_TestCase/test-output/" />
- <classpath refid="classpath.test" />
- </xslt>
- </target>
- </project>
<project name="TestNGTest" default="testoutput" basedir="."> <!-- Define <testng> task --> <taskdef name="testng" classname="org.testng.TestNGAntTask"> <classpath> <pathelement location="lib/testng-6.8.jar" /> </classpath> </taskdef> <property name="testoutputdir" location="test-output" /> <property name="srcdir" location="src" /> <property name="libdir" location="lib" /> <property name="full-compile" value="true" /> <property name="basedir" value="D:/workspace/BKRedcoil_TestCase/" /> <path id="classpath.test"> <fileset dir="${libdir}"> <include name="**/*.jar" /> </fileset> <pathelement location="${testoutputdir}" /> <pathelement location="${srcdir}" /> </path> <target name="clean"> <delete dir="${basedir}/bin" /> </target> <target name="compile" depends="clean"> <mkdir dir="${basedir}/bin" /> <javac srcdir="${srcdir}" encoding="UTF-8" destdir="${basedir}/bin" verbose="${full-compile}" classpathref="classpath.test" includeantruntime="off" debug="on" debuglevel="lines,vars,source" /> </target> <path id="classes"> <fileset dir="${libdir}" includes="*jar"/> <fileset dir="${libdir}" includes="*zip"/> <pathelement location="${basedir}/bin/"/> </path> <target name="runtest" depends="compile"> <testng outputdir="${testoutputdir}" classpathref="classes" delegateCommandSystemProperties="true"> <xmlfileset dir="${srcdir}" includes="testng.xml" /> </testng> </target> <target name="testoutput" depends="runtest"> <xslt in="${testoutputdir}/testng-results.xml" style="${testoutputdir}/testng-results.xsl" out="${testoutputdir}/index.html "> <param name="testNgXslt.outputDir" expression="D:/workspace/BKRedcoil_TestCase/test-output/" /> <classpath refid="classpath.test" /> </xslt> </target> </project>则执行后,会不断打开页面进行exel表格中的账户登录accounts_login.xls
测试报告在test-output文件夹中生成
打开默认生成的测试报告(后面会美化测试报告)
从测试的ExelData数据中可以看到有26组账户数据,其中25个pass,1个fail,原因是我在运行过程中手动kill了一个browser导致remote browser. It may have died.
这些可以在report报告中查看到。(未完待续)
0 0
- Selenium Webdriver实现BKredcoil website 账户自动登录
- Selenium Webdriver实现BKredcoil website 账户自动登录
- Selenium Webdriver实现BKredcoil website 自动登录测试、Single Sign On(TestNG+ANT+Excel数据驱动)
- python+selenium实现登录账户后自动点击
- Webdriver UI自动化测试 实现自动登录
- selenium webdriver实现自动截图与Junit导出report测试报告
- Python实现Selenium实现自动登录CSDN
- Selenium自动测试工具-WebDriver
- Python Selenium实现自动登录163邮箱
- 账户密码自动登录
- selenium2.0&WebDriver环境搭配实现网站自动登录
- selenium webdriver实现windows 身份验证
- Selenium Webdriver实现截图功能
- ubuntu12 root账户自动登录
- 利用Selenium Webdriver 2.0 实现从Web自动保存文件到本地
- [selenium]实现自动登录163邮箱并发送邮件
- Python+Selenium实现新浪微博自动登录
- Selenium Grid+webdriver+Testng实现多线程运行
- Android--Dialog(AlertDialog)
- SVN命令使用详解
- 基本数据型态转换成 String,String 转换成 数字的基本数据型态
- Effective Java Item7:Avoid Finalizers,解释为什么finalize是不安全的,不建议使用
- IIS+PHP+MYSQL环境下,数据库导入问题
- Selenium Webdriver实现BKredcoil website 账户自动登录
- 在ubuntu上部署qt开发环境
- CSS z-index 属性的使用方法和层级树的概念
- javascript基数 - 在网页获得指定ID的元素或对象。
- javax.servlet.ServletContextListener 作用
- 关于android开发环境中sdk和adt更新到22.6之后多了appcompat_v7
- 计划任务执行copy动作的bat文件设置要点
- opencv学习(一)实现将彩色图像转换成灰度图像和二值图像
- magento nginx 在前端使用安全 URL 问题