selenium - 我正在尝试在不同的类中但在同一个浏览器实例中执行多个测试用例
问题描述
/****如何在同一个浏览器实例中执行用两个不同类编写的不同测试用例?我正在开发基本的混合框架(带有 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);
}
}
解决方案
推荐阅读
- wordpress - 我想将人们直接发送到我网站的翻译版本
- linear-algebra - 如果我有从约定 A 到 B 的坐标变换,以及从约定 A 到 C 的坐标变换,我可以开发从 B 到 C 的变换吗?
- websocket - Blazor Server:如何可靠地处理用户操作的延迟?
- javascript - 如何在 Rails 网页中运行 javascript
- python-3.x - 尽管该模型编辑,如何更新从另一个模型创建的用户?
- nba-api - 从 nba.com/stats/transactions/ 获取数据
- c# - 使用 SelectPdf .NET 的中心页脚 PDF
- javascript - 打字稿:价值的意思是 (...args: any[]) => any
- python - 从不同列中提取值时在熊猫中分配新列时出现问题
- reactjs - 将 p12 证书安装到 ReactJs