我可以运行单个测试,但在尝试执行第二个测试时,会抛出此异常。
问题是我通过所有页面的驱动程序是静态的,当我在测试之间关闭浏览器时,它被设置为null并且不再工作,仅适用于第一个场景。
我的疑问是如何修改代码以使其在所有测试中运行,在两者之间关闭浏览器。
package com.***.pageobjects;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;
public class Browser {
private static WebDriver driver = new ChromeDriver();
public static WebDriver driver() {
return driver;
}
public static void open(String url) {
driver.get(url);
}
public static void close() {
driver.quit();
System.out.println(driver.toString());
}
}
public class LoginPage extends LoadableComponent<LoginPage> {
private WebDriver driver;
static String url = "***";
private static String title = "***";
public LoginPage(WebDriver driver) {
this.driver = driver;
PageFactory.initElements(driver, this);
}
@Override
protected void load() {
Browser.open(url);
driver.manage().window().maximize();
}
@Override
protected void isLoaded() throws Error {
assertTrue("Login page not loaded",
driver.getTitle().equals(title));
}
public MainPage MainPage() {
MainPage mainpage = new MainPage(driver);
return mainpage;
}
}
public class MainPage {
private WebDriver driver;
@FindBy(id = "user-userName")
private WebElement userName;
@FindBy(id = "password")
private WebElement pwd;
@FindBy(id = "btnLogin")
private WebElement buttonlogin;
public MainPage(WebDriver driver) {
this.driver = driver;
PageFactory.initElements(driver, this);
}
public void login(String user, String password)
{
userName.sendKeys(user);
pwd.sendKeys(password);
buttonlogin.click();
}
}
public class areaPersonalSuite {
@cucumber.api.java.Before
public void beforeScenario() {
System.setProperty("webdriver.chrome.driver","./src/test/resources/drivers/chromedriver");
}
@Given("Soy cliente")
public void soyCliente() {
}
@When("^Accedo a mi Area Personal con usuario (.*) y password (.*)$")
public void accedoAreaPersonal(String user, String password){
// Create an instance of Home page
LoginPage loginpg = new LoginPage(Browser.driver());
// Navigate to the Home page
loginpg.get();
loginpg.MainPage().login(user,password);
}
@Then ("el sistema muestra mi dirección, teléfono y email correctamente")
public void direccionTelefonoEmail(){
LoginPage telefono = new LoginPage(Browser.driver());
telefono.MainPage().addressCheck();
@cucumber.api.java.After
public void afterScenario() {
Browser.close();
答案 0 :(得分:0)
如果我理解正确,你的问题更多的是关于驱动程序管理。我建议使用经过验证的现有框架,如QAF来处理驱动程序管理。
它允许您通过属性或运行配置xml文件配置驱动程序,并根据运行配置为测试用例创建驱动程序实例。您也可以在不同的浏览器上运行相同的测试,无需修改代码。
public class LoginPage extends WebDriverTestPage{
@FindBy("locator.in.repository")
private WebElement ele;
public WebElement getEle(){
return ele;
}
}
您也可以使用QAF中使用的BDD gherkin with QAF。您可以查看sample project或此处QAF gherkin example