(1)优化上节的LoginPage和IndexPage
这两个类文件分别可以提取出公共元素行为作为公共的方法
1.创建包---存公共的类文件
com.lemon.common
2 .创建类
1)BasePage -所有page的基类
- BaseCase--所有case的基类
3)优化LoginPage
-------------------------------------代码如下----------------------------
(1)BasePage
package com.lemon.common;
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.support.ui.ExpectedConditions;
import org.openqa.selenium.support.ui.WebDriverWait;
/**
* 页面的共性操作,如:等待元素可见,等到元素可点击,获取元素属性等等)
*
* @author TF
*
*/
public class BasePage {
/**
* @param 二次封装显示等待,等待元素可见
* @return
*/
public WebElement waitElementVisible(By locator) {
WebDriverWait wait = new WebDriverWait(BaseCases.driver, 5);
WebElement until = wait.until(ExpectedConditions.visibilityOfElementLocated(locator));
return until;
}
/**
* @param 二次封装显示等待,等待元素可点击
* @return
*/
public WebElement waitElementClickable(By locator) {
WebDriverWait wait = new WebDriverWait(BaseCases.driver, 5);
return wait.until(ExpectedConditions.elementToBeClickable(locator));
}
public String getElementText(By locator) {
return waitElementVisible(locator).getText();
}
/**
* 获取某个元素的属性的属性值
*
* @param locator---元素
* @param attributekey--元素的属性
* @return
*/
public String getElementAttributeValue(By locator, String attributekey) {
return waitElementVisible(locator).getAttribute(attributekey);
}
}
(2)BaseCases
package com.lemon.common;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebDriver.Navigation;
import org.openqa.selenium.chrome.ChromeDriver;
public class BaseCases {
// 驱动程序,在整个程序运行期间都是存在的
public static WebDriver driver;
/**
* 用例的共性操作(-打开浏览器,关闭浏览器,刷新,最大化浏览器)
*
* @param browser
*/
public static void openBrowser(String browser) {
if (browser.equals("chrome")) {
// 1.设置chromedriver驱动文件的路径
System.setProperty("webdriver.chrome.driver", "src/test/resources/chromedriver.exe");
// 2.打开浏览器
driver = new ChromeDriver();
// 4.退出浏览器即关闭浏览器
// quit是退出浏览器,close是只关闭当前打开的窗口,不等于关闭整个浏览器
// driver.quit();
}
}
/**
* 访问的url
* @param url
*/
public void toUrl(String url) {
driver.get(url);
}
/**
* 退出浏览器
*/
public void quitBrowser() {
driver.quit();
}
/**
* 最大化浏览器
*/
public void MaxBrowser() {
driver.manage().window().maximize();
}
/**
* 刷新浏览器
*/
public void refreshBrowser() {
Navigation navigate = driver.navigate();// 获取导航对象
navigate.refresh();// 刷新浏览器
}
/**
* 浏览器前进
*/
public void forward() {
Navigation navigate = driver.navigate();// 获取导航对象
navigate.forward();
}
/**
* 浏览器后退
*/
public void back() {
Navigation navigate = driver.navigate();// 获取导航对象
navigate.back();
}
}
(3)LoginPage
package com.lemon.pageobject;
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.support.ui.ExpectedConditions;
import org.openqa.selenium.support.ui.WebDriverWait;
import com.lemon.common.BasePage;
/**
* 把页面上的定位元素看成页面的成员变量 每个元素封装成一个方法
*
* @author TF
*
*/
public class LoginPage extends BasePage {
// 成员变量1:手机号码输入框定位器
private By mobilephone = By.name("phone");
// 成员变量2:密码输入框定位器
private By password = By.name("password");
// 成员变量3:登录按钮定位器
private By login = By.xpath("//button[text()='登录']");
// 成员变量4:提示信息--{此账号没有授权,请联系管理员!;帐号或密码错误!}--这是后端写的提醒,返回给前端
private By msg = By.className("layui-layer-content");
// 成员变量5:input框错误提示信息{"请输入手机号";"请输入密码";"请输入正确的手机号"}
private By tips = By.className("form-error-info");
public void inputMobilephone(String data) {
// 输入手机号
waitElementVisible(mobilephone).sendKeys(data);
}
public void inputPassword(String pwd) {
// 输入密码
waitElementVisible(password).sendKeys(pwd);
}
public void clickLoginButton() {
// 点击登录
waitElementClickable(login).click();
}
/**
* 获取提醒信息文本值
*
* @return
*/
public String getMsgText() {
return getElementText(msg);// 返回元素文本值
}
/**
* 获取input框校验提醒信息
*
* @return
*/
public String getTipsText() {
return getElementText(tips);// 返回input校验信息文本值
}
/**
* 获取手机号的属性值 注意这里的手机号是<input value="手机号">
*
* @return
*/
public String getPhoneAttribute() {
return getElementAttributeValue(mobilephone, "value");// 传入元素和元素的value属性
}
}
(4)IndexPage
package com.lemon.pageobject;
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.support.ui.ExpectedConditions;
import org.openqa.selenium.support.ui.WebDriverWait;
import com.lemon.common.BasePage;
public class IndexPage extends BasePage {
// 首页--我的账户元素定位器
private By myAccount = By.xpath("//a[contains(text(),'我的帐户')]");
// 首页 --退出元素定位器
private By quit = By.partialLinkText("退出");
// 首页--登录元素定位器
private By login = By.partialLinkText("登录");
/**
* 待我的账户元素可见
*
* @return
*/
public boolean WaitmyAccountVisible() {
// element.isDisplayed();判断myAccount元素是否显示出来,返回的是boolean类型的值
return waitElementVisible(myAccount).isDisplayed();
}
/**
* 点击退出
*/
public void clickQuit() {
waitElementClickable(quit).click();
}
/**
* 点击登录
*
*/
public void clickLogin() {
waitElementClickable(login).click();
}
}
(5)LoginCases
package com.lemon.testcases;
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.support.ui.ExpectedConditions;
import org.openqa.selenium.support.ui.WebDriverWait;
import org.testng.Assert;
import org.testng.annotations.AfterMethod;
import org.testng.annotations.BeforeMethod;
import org.testng.annotations.DataProvider;
import org.testng.annotations.Test;
import com.lemon.common.BaseCases;
import com.lemon.pageobject.IndexPage;
import com.lemon.pageobject.LoginPage;
public class Logincases extends BaseCases {
@BeforeMethod
public void setUp() {
// 前置
// 打开浏览器
openBrowser("chrome");
// 最大化浏览器
MaxBrowser();
toUrl("http://120.78.128.25:8765/Index/login.html");
}
/**
* 反向case数据提供源01
*
* @return
*/
@DataProvider
public Object[][] loginDatas01() {
Object[][] datas = { { "13333333331", "lemon123456", "此账号没有经过授权,请联系管理员!" },
{ "13323234545", "lemon12345", "帐号或密码错误!" }, { "13323234545", "lemon1234567", "帐号或密码错误!" },
{ "13323234545", "LEMON123456", "帐号或密码错误!" }, { "13323234545", "lemon 123456", "帐号或密码错误!" }
};
return datas;
}
/**
* 反向case数据提供源02
*
* @return
*/
@DataProvider
public Object[][] loginDatas02() {
Object[][] datas = { { "", "lemon123456", "请输入手机号" }, { "13323234545", "", "请输入密码" },
{ "1332323454", "lemon123456", "请输入正确的手机号" }, { "133232345456", "lemon123456", "请输入正确的手机号" },
{ "133232$454%", "lemon123456", "请输入正确的手机号" }
};
return datas;
}
/**
* 正向用例 成功登录
*/
@Test(priority = 1, enabled = false)
public void Login_success() throws InterruptedException {
// 1实例化LoginPage
LoginPage loginPage = new LoginPage();// 优化后,不需要再传入driver
// 2输入手机号
loginPage.inputMobilephone("13323234545");
// 3输入密码
loginPage.inputPassword("lemon123456");
// 4点击登录
loginPage.clickLoginButton();
// 5 实例化IndexPage
IndexPage indexPage = new IndexPage();
// 6断言--indexPage.WaitmyAccountVisible()返回的是True->即我的账户 元素可见说明断言成功
Assert.assertTrue(indexPage.WaitmyAccountVisible());
}
/**
* 反向用例1 未注册 密码错误(区分大小写,密码长度与正确的密码长度少一位和多一位)
*/
@Test(priority = 2, dataProvider = "loginDatas01")
public void login_failure01(String mobilephone, String pwd, String msg) {
// 1实例化LoginPage
LoginPage loginPage = new LoginPage();// 调用有参够造
// 2输入手机号
loginPage.inputMobilephone(mobilephone);
// 3输入密码
loginPage.inputPassword(pwd);
// 4点击登录
loginPage.clickLoginButton();
// 5 断言 loginPage.getMsgText() 对象点方法 获取提示信息文本值
String actualValue = loginPage.getMsgText();
String expectedValue = msg;// 获取元素的文本的值
Assert.assertEquals(actualValue, expectedValue);
}
/**
* 反向用例02 密码为空 账号为空 账号错误(10位,12位,数字和特殊字符组合)
*
* @param mobilephone
* @param pwd
* @param msg
*/
@Test(priority = 3, dataProvider = "loginDatas02")
public void login_failure02(String mobilephone, String pwd, String msg) {
// 1实例化LoginPage
LoginPage loginPage = new LoginPage();// 调用有参够造
// 2输入手机号
loginPage.inputMobilephone(mobilephone);
// 3输入密码
loginPage.inputPassword(pwd);
// 4点击登录
loginPage.clickLoginButton();
// 5 断言
String actualValue = loginPage.getTipsText();
String expectedValue = msg;// 获取元素的文本的值
Assert.assertEquals(actualValue, expectedValue);
}
/**
* 记住手机号 记住手机号,这里默认是勾选的,所有脚本里面不用再找到 记住手机号的元素进行.click()
*
* @param mobilephone
* @param pwd
* @param msg
*/
@Test(priority = 4)
public void login_remeber() {
// 1实例化LoginPage
LoginPage loginPage = new LoginPage();// 调用有参够造
// 2输入手机号
loginPage.inputMobilephone("13323234545");
// 3输入密码
loginPage.inputPassword("lemon123456");
// 4点击登录
loginPage.clickLoginButton();
// 5 实例化indexPage
IndexPage indexPage = new IndexPage();
// 6 点击 退出
indexPage.clickQuit();
// 7 点击登录
indexPage.clickLogin();
// 8 断言:获取手机号---注意这里的手机号是<input value="手机号">
String actualValue = loginPage.getPhoneAttribute();
String expectedValue = "13323234545";// 获取元素的文本的值
Assert.assertEquals(actualValue, expectedValue);
}
@AfterMethod
public void teardown() {
// 退出浏览器
quitBrowser();
}
}
网友评论