首页 > 解决方案 > 我正在尝试在不同的类中但在同一个浏览器实例中执行多个测试用例

问题描述

/****如何在同一个浏览器实例中执行用两个不同类编写的不同测试用例?我正在开发基本的混合框架(带有 PFM 的 POM)。在这个框架中,我编写了两个页面类 1. Loginpage 2.HomePage 和两个测试类 1.LoginTest 2. HomePageTest。在 LoginTest 中,我通过使用 excel 表提供数据来验证登录测试用例,它工作得非常好。在 HomePageTest 类中,我想在登录后验证搜索功能。

问题: 1. 登录后如何使用 HomePageTest 类中的 Login 方法(Loginpage 类编写)进行搜索?2. 我知道在 HomePageTest 类中有多种调用登录方法的方法,但最好的方法是什么?3. 我可以在不关闭和重新打开浏览器的情况下执行两个不同类编写的两个测试用例吗?如果是,那么如何?****/

这是我的代码:BaseClass:

package basePackage;

import java.util.concurrent.TimeUnit;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.firefox.FirefoxDriver;
import org.testng.ITestResult;
import org.testng.Reporter;
import org.testng.annotations.AfterMethod;
import org.testng.annotations.BeforeMethod;
import org.testng.annotations.Parameters;


public class BaseClass {

public static WebDriver driver;


    @BeforeMethod
    @Parameters({"browser", "baseUrl"})
    //@BeforeClass
    public static void intitialization(String browserName, String url)
    {
        if (browserName.equalsIgnoreCase("chrome"))
        {
            System.setProperty("webdriver.chrome.driver", "/home/ambrish/Lockdown_Tets/SeleniumPractice/drivers/chromedriver");
            driver= new ChromeDriver();
            Reporter.log("Chrome Launched", true);
        }
        else if(browserName.equalsIgnoreCase("FireFox"))
        {
            System.setProperty("webdriver.gecko.driver","/home/ambrish/Lockdown_Tets/SeleniumPractice/drivers/geckodriver");
            driver= new FirefoxDriver();
            Reporter.log("Firefox Launched", true);
        }

        driver.manage().window().maximize();
        driver.manage().timeouts().implicitlyWait(20, TimeUnit.SECONDS);
        driver.get(url);

        Reporter.log(url+ "url navigated", true);

    }

    @AfterMethod
    public void tearDown(ITestResult result)
    {
        String scriptName = result.getMethod().getMethodName();
        if (result.isSuccess())     //true---> script pass
        {
            Reporter.log(scriptName+ "script is passed :)", true);
        }
        else  //false----> script failed
        {
           ScreenshotLib slib = new ScreenshotLib(driver);
           slib.takescreenshot(scriptName);
           Reporter.log("screenshot has been taken", true);
        }

        driver.close();
        Reporter.log("Browser closed", true);


    }

}

登录页面类:

package pageObject;

import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.support.FindBy;
import org.openqa.selenium.support.PageFactory;
import org.testng.Assert;
import org.testng.Reporter;

import basePackage.BaseClass;


public class LoginPage extends BaseClass {

    @FindBy(xpath="//a[contains(text(),'Login & Signup')]")
    private WebElement LoginLink;

    @FindBy(xpath="(//form/div/input[@type='text'])")
    private WebElement UnTxBx;

    @FindBy(xpath="//input[@type='password']")
    private WebElement PwdTxBx;

    @FindBy(xpath="(//button[@type='submit'])[last()]")
    private WebElement loginBtn;

    @FindBy(xpath="//span[contains(text(),'Your username or password is incorrect')]")
    private WebElement invalidLoginMsg;


    //Intializing Page Object
    public LoginPage()
    {
        PageFactory.initElements(driver, this);
    }

    public  static void login(String username, String password)
    {
      UnTxBx.sendKeys(username);    
      PwdTxBx.sendKeys(password);
      loginBtn.click();
     }

}

主页类:

package pageObject;

import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.support.FindBy;
import org.openqa.selenium.support.PageFactory;

import basePackage.BaseClass;
import basePackage.WaitStatementLib;

public class FKartHome extends BaseClass {
    @FindBy(xpath="//input[@title='Search for products, brands and more']")
    private WebElement SearchSendKeys;


    @FindBy(xpath="//button[@type='submit']")
    private WebElement ClickSubmit;


    public FKartHome()
    {
        PageFactory.initElements(driver, this);
    }

    public  static void search(String searchBook)
    {
        WaitStatementLib.eWaitForVisible(20, SearchSendKeys);
        SearchSendKeys.sendKeys(searchBook);
        ClickSubmit.click();

    }

}
LoginPageTestClass:

package scriptTest;


import org.testng.annotations.Test;
import basePackage.BaseClass;
import basePackage.ExcelUtilities;
import pageObject.FKartHome;
import pageObject.LoginPage;

public class LoginPageTest extends BaseClass {
    public  static LoginPage  loginPage;

    @Test
    public static void loginTest()
    {
        String filepath= "/home/ambrish/Lockdown_Tets/SeleniumPractice/TestDataSheet/testdata.xlsx";
        String username = ExcelUtilities.readData(filepath, "sheet1", 1, 1);
        String password = ExcelUtilities.readData(filepath, "sheet1", 1, 2);
        loginPage = new LoginPage();
        loginPage .login(username, password);
    }
}

主页测试类:

package scriptTest;

import org.testng.annotations.Test;
import basePackage.BaseClass;
import pageObject.FKartHome;
import pageObject.ItemsPage;
import pageObject.LoginPage;

public class FKartHomeTest extends BaseClass {

    public static FKartHome fKartHome;

    @Test
    public void searchBook()
    {

        String searchBook= "Books";
         fKartHome= new FKartHome();
         fKartHome.search(searchBook);

    }

}

标签: seleniummaven

解决方案


推荐阅读