这一篇主要完善两点:
1、我们的系统所有交易和操作都是在登陆的基础上做的,所以把登陆功能写成一个单独的类,然后在第一个测试用例中通过创建登陆类的对象来登陆系统 和判断是否登录成功,如下 :
Loginpage.java中的内容不变,只增加两行断言成功的代码
package pageobject;
import framework.BasePage;
import framework.Excel;
import framework.Log;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.support.FindBy;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.support.ui.ExpectedConditions;
import org.openqa.selenium.support.ui.WebDriverWait;
import org.testng.Assert;
public class LoginPage extends BasePage {
@FindBy (xpath="html/body/div[6]/div[2]/div/div/div[2]/form/div[1]/div/div[1]/input")
WebElement username_inputBox;
@FindBy (xpath="/html/body/div[6]/div[2]/div/div/div[2]/form/div[2]/div/div[1]/input")
WebElement password_inputBox;
@FindBy (xpath="/html/body/div[6]/div[2]/div/div/div[2]/form/div[3]/div/div/input")
WebElement verifypic_inputBox;
@FindBy (xpath="/html/body/div[6]/div[2]/div/div/div[2]/form/div[4]/div/div/div[1]/div/input")
WebElement serveraddress_inputBox;
// 135环境:xpath="/html/body/div[5]/div[2]/div/div/div[2]/form/div[4]/div/div/div[2]/ul[2]/li[1]
//105环境:xpath="/html/body/div[5]/div[2]/div/div/div[2]/form/div[4]/div/div/div[2]/ul[2]/li[2]
///135:html/body/div[6]/div[2]/div/div/div[2]/form/div[4]/div/div/div[2]/ul[2]/li[1]
@FindBy (xpath="/html/body/div[6]/div[2]/div/div/div[2]/form/div[4]/div/div/div[2]/ul[2]/li[1]")
WebElement serveraddress_selector;
///html/body/div[6]/div[2]/div/div/div[3]/div/button
@FindBy (xpath="//div[@class='y-login v-transfer-dom']/div[2]/div/div/div[3]/div/button")
WebElement Login_Button;
@FindBy (xpath="//div[@id='app']/div/header/div[1]/div/div/a")
WebElement username_a;
public LoginPage(WebDriver driver){
super(driver);
}
public void Login() throws Exception{
Excel excel=new Excel();
excel.setExcelFile("E:\\Java_project\\XTPTest_selenium\\suites\\test-data.xlsx","Login_info");
//Excel中的行和列都是从0开始的不是从1
type(username_inputBox,excel.getCellData(1,0));
type(password_inputBox,excel.getCellData(1,1));
type(verifypic_inputBox,excel.getCellData(1,2));
// type(serveraddress_inputBox,"10.29.181.135");
click(serveraddress_inputBox);
callWait(3);
click(serveraddress_selector);
//选择了服务器地址后用户名被清空,需要再次输入用户名才能登陆成功
type(username_inputBox,excel.getCellData(1,0));
callWait(2);
click(Login_Button);
//显示等待10秒
WebDriverWait wait=new WebDriverWait(driver,10);
wait.until(ExpectedConditions.textToBePresentInElement(username_a,excel.getCellData(1,0)));
Log.info("显示等待10秒");
//断言是否登陆成功
Assert.assertEquals(excel.getCellData(1,0),username_a.getText());
Log.info("断言登录是否成功");
}
}
Login.java中的内容:
package pageobject_functions;
import framework.BrowserEngine;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.support.PageFactory;
import pageobject.LoginPage;
public class Login {
public WebDriver driver;
public void initSetup()throws Exception{
//加载浏览器打开url;
BrowserEngine browserEngine=new BrowserEngine();
browserEngine.initConfigData();
driver=browserEngine.getBrowser();
}
public void loginValid() throws Exception{
//实现登陆
LoginPage loginpage= PageFactory.initElements(driver,LoginPage.class);
loginpage.Login();
}
}
Login类中的initSetup方法主要完成启动浏览器,打开url的功能;loginValid()方法主要完成登陆和断言登陆是否成功的功能。在最后的测试类中我们通过Login类创建对象来调用Login类的方法:
package testsuite;
import framework.BrowserEngine;
import framework.BasePage;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.support.PageFactory;
import org.testng.annotations.AfterClass;
import org.testng.annotations.BeforeClass;
import org.testng.annotations.Test;
import pageobject.HomePage;
import pageobject.LoginPage;
import pageobject_functions.Login;
import java.io.IOException;
public class Stock_order {
public static WebDriver driver;
@BeforeClass
public void setUp() throws Exception {
Login login=new Login();
login.initSetup();
login.loginValid();
driver=login.driver;
}
@Test
public void stockorder()throws Exception{
HomePage homepage=PageFactory.initElements(driver,HomePage.class);
homepage.buystock();
}
@AfterClass
public void teardown() throws InterruptedException{
BrowserEngine browserEngine=new BrowserEngine();
browserEngine.tearDown();
}
}
2、解决执行多个测试用户只启动一次浏览器的问题:先执行测试用例A类,再执行测试用例B类,解决思路:
(1)在A中定义driver为静态变量,public static WebDriver driver;
(2)A执行完之后不要执行quit.driver操作;
(3)在B的前面通过A.driver将driver传递给B类;
参考博文: