安装配置:
安装java JDK1.6以上,配置环境变量.
安装maven,配置环境变量.
安装Tomcat服务器.
安装eclipse,安装testNg、Properties Editor插件
插件在help->Eclipse Marketplace->search->find里找
安装火狐浏览器,安装相应的Selenium IDE,Firebug和xpather
项目导入:测试项目,和自动化测试项目
自动化测试项目编写:
/trackerSelenium/src/main/java/com/sim/trackerSelenium/WebDriverInterface.java 提供webDriver 接口类
/trackerSelenium/src/main/java/com/sim/trackerSelenium/inf/BrowserDriver.java 创建浏览器驱动,WebDriverInterface的实现类
/trackerSelenium/src/main/java/com/sim/trackerSelenium/page/EntryTimeElment.java 寻找页面元素
/trackerSelenium/src/main/java/com/sim/trackerSelenium/utils/BrowserUtils.java 读取配置文件找驱动的
/trackerSelenium/src/main/java/com/sim/trackerSelenium/utils/ReadExcelUtils.java 读取excel的帮助类
/trackerSelenium/src/main/java/com/sim/trackerSelenium/utils/ScreenshotUtils.java 截图工具类
/trackerSelenium/src/main/java/com/sim/trackerSelenium/utils/WebDriverUtils.java 加载浏览器驱动
/trackerSelenium/src/main/resources/config/config.properties 修改浏览器驱
动
/trackerSelenium/src/main/resources/data/loginPage.xls 待读取的excel文件
/trackerSelenium/src/main/resources/driver/chromedriver.exe 浏览器驱动
/trackerSelenium/src/main/resources/log4j.properties log的配置文件
/trackerSelenium/src/test/java/com/sim/trackerSelenium/test/EntryTimeTest.java 自动化测试类
/trackerSelenium/src/test/java/com/sim/trackerSelenium/test/testNg_Time.xml 自动化测试配置文件
主要的三个文件
1. 程序入口文件testNg_***.xml, 自动化测试配置文件。位于com.sim.trackerSelenium.test下。复制后,改名为testNg_***.xml,修改参数配置、运行脚本。
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd">
<suite name="Suite" parallel="false" >
<listeners>
<listener class-name="org.uncommons.reportng.HTMLReporter" />
<listener class-name="org.uncommons.reportng.JUnitXMLReporter" />
</listeners>
<!-- 参数配置 -->
<!-- url 对应java文件的@Parameters(value = { "url" }) -->
<parameter name="url" value="http://localhost:8080/deft/login" />
<!-- url 对应java文件的@Parameters(value = { "userName", "password" })-->
<parameter name="userName" value="admin" />
<parameter name="password" value="123456" />
<!-- 运行脚本 -->
<test name="Test">
<classes>
<对应要执行的java代码 ->
<class name="com.sim.trackerSelenium.test.EntryTimeTest"/>
</classes>
</test>
</suite>
2. 自动化测试类,位于com.sim.trackerSelenium.test下。复制后,改类名,改方法名,改写test***方法。
/*
* Copyright 2002-2012 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.sim.trackerSelenium.test;
import java.util.concurrent.TimeUnit;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebDriverBackedSelenium;
import org.testng.annotations.AfterClass;
import org.testng.annotations.BeforeClass;
import org.testng.annotations.Parameters;
import org.testng.annotations.Test;
import com.sim.trackerSelenium.page.EntryTimeElment;
import com.sim.trackerSelenium.utils.BrowserUtils;
import com.sim.trackerSelenium.utils.ScreenshotUtils;
import com.thoughtworks.selenium.Selenium;
/**
* 填写java文件相关信息
* @packageName com.sim.trackerSelenium.test
*
* @createClass class EntryTimeTest.java
*
* @description <p>
* 工时模块自动化
* </p>
* @author naiwei ge
*
* @mail naiwei.ge@sim.com
*
* @createTime 2014年8月8日 上午11:50:57
*
* @version 1.0
*/
public class EntryTimeTest {
private WebDriver webDriver;
private Selenium selenium;
private EntryTimeElment entryTimeElment;
@Parameters(value = { "url" })
@BeforeClass
public void samplerWebDriver(String url) {
webDriver = BrowserUtils.getWebDriver();
// 填充系统地址
webDriver.get(url);
// 浏览器最大化
webDriver.manage().window().maximize();
selenium = new WebDriverBackedSelenium(webDriver, url);
}
@Parameters(value = { "userName", "password" })
@Test
public void testEntryTime(String userName, String password) throws Exception {
//此处设置的等待时间 是针对全局设置的,找不到元素会默认等待三十秒。
webDriver.manage().timeouts().implicitlyWait(30, TimeUnit.SECONDS);
entryTimeElment=new EntryTimeElment(webDriver);
//登录
//清空元素内信息,一般用于输入框
entryTimeElment.username.clear();
entryTimeElment.password.clear();
//给输入框赋值
entryTimeElment.username.sendKeys(userName);
entryTimeElment.password.sendKeys(password);
//点击元素事件
entryTimeElment.subLogin.click();
//添加
//等待2000毫秒
selenium.waitForPageToLoad("2000");
entryTimeElment.d9.click();
selenium.waitForPageToLoad("2000");
entryTimeElment.addHour.click();
selenium.waitForPageToLoad("2000");
entryTimeElment.workinghours.clear();
entryTimeElment.workinghours.sendKeys("1");
entryTimeElment.remark.clear();
entryTimeElment.remark.sendKeys("轻武器");
entryTimeElment.submit.click();
selenium.waitForPageToLoad("2000");
entryTimeElment.submitModal.click();
selenium.waitForPageToLoad("2000");
entryTimeElment.alertMsg_btn1.click();
selenium.waitForPageToLoad("5000");
//修改
entryTimeElment.d9.click();
selenium.waitForPageToLoad("3000");
entryTimeElment.modify0.click();
selenium.waitForPageToLoad("3000");
entryTimeElment.workinghours.clear();
entryTimeElment.workinghours.sendKeys("2");
entryTimeElment.remark.clear();
entryTimeElment.remark.sendKeys("hello!");
entryTimeElment.submit.click();
selenium.waitForPageToLoad("2000");
entryTimeElment.submitModal.click();
selenium.waitForPageToLoad("2000");
entryTimeElment.alertMsg_btn1.click();
selenium.waitForPageToLoad("5000");
//删除
entryTimeElment.d9.click();
selenium.waitForPageToLoad("2000");
entryTimeElment.del0.click();
selenium.waitForPageToLoad("2000");
entryTimeElment.Undodel.click();
selenium.waitForPageToLoad("10000");
entryTimeElment.del1.click();
selenium.waitForPageToLoad("2000");
entryTimeElment.submitModal.click();
selenium.waitForPageToLoad("2000");
entryTimeElment.alertMsg_btn1.click();
selenium.waitForPageToLoad("2000");
entryTimeElment.d9.click();
selenium.waitForPageToLoad("2000");
//截图工具,汉字部分是保存截图的文件名
ScreenshotUtils.screenshot(webDriver,"删除状态");
entryTimeElment.closeModal.click();
selenium.waitForPageToLoad("2000");
//查看
entryTimeElment.todaydiv.click();
ScreenshotUtils.screenshot(webDriver,"当前月份");
selenium.waitForPageToLoad("2000");
entryTimeElment.last_month.click();
selenium.waitForPageToLoad("2000");
ScreenshotUtils.screenshot(webDriver,"上个月");
selenium.waitForPageToLoad("2000");
entryTimeElment.next_month.click();
selenium.waitForPageToLoad("2000");
entryTimeElment.next_month.click();
selenium.waitForPageToLoad("2000");
ScreenshotUtils.screenshot(webDriver,"下个月");
selenium.waitForPageToLoad("2000");
entryTimeElment.cal.click();
selenium.waitForPageToLoad("2000");
entryTimeElment.June.click();
selenium.waitForPageToLoad("3000");
ScreenshotUtils.screenshot(webDriver,"六月");
}
@AfterClass
public void webDriverQuit() {
webDriver.quit();
}
}
3. 寻找页面元素java类,com.sim.trackerSelenium.page目录下。复制后,重命名,定义自己需要的元素。
获取xpath
谷歌:在需要的元素上点击鼠标右键->审查元素->Elements->蓝色部分->鼠标右键->Copy XPath //*[@id="main_div"]/div[1]/div[2]/a/span/img,修改双引号为单引号粘贴到@FindBy(xpath = "/html/body/div[4]/div[4]/table/tbody/tr/td/span[6]")红色字体中。有id在谷歌copy出的路径前面要加“.”
火狐:在需要的元素上点击鼠标右键->View XPath->
将XPath复制粘贴到@FindBy(xpath = "/html/body/div[4]/div[4]/table/tbody/tr/td/span[6]")红色字体中,去掉火狐XPath中的“x:”
/*
* Copyright 2002-2012 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.sim.trackerSelenium.page;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.support.FindBy;
import org.openqa.selenium.support.PageFactory;
/**
*
* @packageName com.sim.trackerSelenium.loginpage
*
* @createClass class LoginPageElment.java
*
* @description <p>
* page页封装
*
* </p>
* @author naiwei ge
*
* @mail naiwei.ge@sim.com
*
* @createTime 2014年8月5日 下午3:35:36
*
* @version 1.0
*/
public class EntryTimeElment {
//private Logger logger=LoggerFactory.getLogger(getClass());
/**
*
*/
@FindBy(xpath = ".//*[@id='d9']")
public WebElement d9;
@FindBy(xpath = ".//*[@id='addHour']")
public WebElement addHour;
@FindBy(xpath = ".//*[@id='workinghours']")
public WebElement workinghours;
@FindBy(xpath = ".//*[@id='remark']")
public WebElement remark;
@FindBy(xpath = ".//*[@id='submit']")
public WebElement submit;
@FindBy(xpath = ".//*[@id='username']")
public WebElement username;
@FindBy(xpath = ".//*[@id='password']")
public WebElement password;
@FindBy(xpath = ".//*[@id='subLogin']")
public WebElement subLogin;
@FindBy(xpath = ".//*[@id='submitModal']")
public WebElement submitModal;
@FindBy(xpath = ".//*[@id='alertMsg_btn1']")
public WebElement alertMsg_btn1;
@FindBy(xpath = ".//*[@id='del0']")
public WebElement del0;
@FindBy(xpath = ".//*[@id='del1']")
public WebElement del1;
@FindBy(xpath = ".//*[@id='del0_deldiv']/font")
public WebElement Undodel;
@FindBy(xpath = ".//*[@id='modify0']")
public WebElement modify0;
@FindBy(xpath = ".//*[@id='todaydiv']")
public WebElement todaydiv;
@FindBy(xpath = ".//*[@id='last_month']")
public WebElement last_month;
@FindBy(xpath = ".//*[@id='next_month']")
public WebElement next_month;
@FindBy(xpath = ".//*[@id='selectMonth']/span/span")
public WebElement cal;
@FindBy(xpath = "/html/body/div[4]/div[4]/table/tbody/tr/td/span[6]")
public WebElement June;
@FindBy(xpath = ".//*[@id='godiv']")
public WebElement godiv;
@FindBy(xpath = ".//*[@id='closeModal']")
public WebElement closeModal;
/**
*
*
* constructed function
*
* @Author naiwei ge
*
* @createDate 2014年8月5日 下午3:50:37
*
* @param driver
*/
public EntryTimeElment(WebDriver driver) {
PageFactory.initElements(driver, this);
}
}