gpt4 book ai didi

java - Selenium 测试设置

转载 作者:太空宇宙 更新时间:2023-11-04 12:04:38 24 4
gpt4 key购买 nike

我需要登录才能开始测试。因此,在我的测试类中,我使用 @BeforeClass 方法登录到我的应用程序。然后我开始简单测试,但没有成功。当我从 @BeforeClass 中删除我的登录名并将其用于我的测试时,它工作正常。但我不想在开始之前登录所有测试。我认为我的对象是静态的,但我不知道为什么。这是我不工作的代码:

public class ModulesTests extends FunctionalTest {

static LoginPage loginPage;
static LoginPageReceipt loginPageReceipt;

@BeforeClass
public static void login() {
FunctionalTest.driver.get(GlobalVariables.URL);
loginPage = new LoginPage(FunctionalTest.driver);
loginPageReceipt = loginPage.login(GlobalVariables.USER_NAME, GlobalVariables.PASSWORD);
}

@Test
public void products() {
ProductsPage productsPage = loginPageReceipt.productsPage();
}
}

这是它的工作原理:

public class ModulesTests extends FunctionalTest {

@BeforeClass
public static void login() {
FunctionalTest.driver.get(GlobalVariables.URL);
}

@Test
public void products() {
LoginPage loginPage = new LoginPage(FunctionalTest.driver);
LoginPageReceipt loginPageReceipt = loginPage.login(GlobalVariables.USER_NAME, GlobalVariables.PASSWORD);
ProductsPage productsPage = loginPageReceipt.productsPage();
}

}

我的其余类(class):

public class FunctionalTest {
protected static WebDriver driver;

@BeforeClass
public static void setUp() {
ChromeOptions options = new ChromeOptions();
options.addArguments("--start-maximized");
System.setProperty("webdriver.chrome.driver", "src\\main\\resources\\chromedriver.exe");
driver = new ChromeDriver(options);
driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);
}

@After
public void cleanUp() {
driver.manage().deleteAllCookies();
}

@AfterClass
public static void tearDown() {
driver.close();
}
}

public class LoginPage extends PageObject {

@FindBy(id = "UserName")
private WebElement userName;

@FindBy(id = "Password")
private WebElement password;

@FindBy(id = "loginButton")
private WebElement loginButton;

public LoginPage(WebDriver driver) {
super(driver);
assertTrue(userName.isDisplayed());
assertTrue(password.isDisplayed());
assertTrue(loginButton.isDisplayed());
}

public void enterUserName(String userName) {
this.userName.clear();
this.userName.sendKeys(userName);
}

public void enterUserPassword(String password) {
this.password.clear();
this.password.sendKeys(password);
}

public LoginPageReceipt login(String userName, String password) {
enterUserName(userName);
enterUserPassword(password);
loginButton.click();
return new LoginPageReceipt(driver);
}
}

public class LoginPageReceipt extends PageObject {

public NavigationModules mainNav;

@FindBy(xpath = "//*[@id=\"loginPartial\"]")
private WebElement userNamePanel;

@FindBy(id = "products-menuitem")
private WebElement goToProductsPage;

public LoginPageReceipt(WebDriver driver) {
super(driver);
}

public String loginConfirmation() {
return userNamePanel.getText();
}

public ProductsPage productsPage() {
System.out.println(goToProductsPage.getText());
goToProductsPage.click();
return new ProductsPage(driver);
}

public NavigationModules initModuleNav() {
return new NavigationModules(driver);
}
}

public class ProductsPage extends PageObject {

@FindBy(id = "products-content-navigation")
private WebElement productMenu;

public ProductsPage(WebDriver driver) {
super(driver);
assertTrue(productMenu.isDisplayed());
}
}

public class PageObject {

protected WebDriver driver;

public PageObject(WebDriver driver) {
this.driver = driver;
PageFactory.initElements(driver, this);
System.out.println(getClass().getName());
}
}

编辑。我刚刚看到,当我使用 @BeforeClass 方法时,我还得到 java.lang.reflect.constructor.newinstance(unknown source) 异常。

最佳答案

您应该使用@Before,以便所有测试都必须先登录才能继续,同时,@BeforeClass 运行一次,以防万一多个测试共享相同的对象。

请看一下这个link .

关于java - Selenium 测试设置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40526857/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com