IDEA+maven+java+TestNG POM+DDT第六篇用框架完善

这一篇主要完善两点:

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类;

参考博文:

https://blog.csdn.net/u011541946/article/details/77202949

https://blog.csdn.net/u011541946/article/details/77388788

猜你喜欢

转载自blog.csdn.net/weixin_39430584/article/details/82454920
今日推荐