当我使用WebDriver的静态对象引用并且并行运行测试时,我开始遇到问题。
public static WebDriver driver;
因此我决定对WebDriver使用非静态对象引用。
private WebDriver driver;
现在当我将POM与Page Factory一起使用时,我的理解是,每次创建测试时,我都必须在测试类中创建一个新的Object,如下所示。
/ * Page Object类* /
中的构造函数
private WebDriver driver;
public LoginPage(WebDriver driver) {
this.driver = driver;
PageFactory.initElements(driver, this);
}
2个测试用例如下所示。
private LoginPage loginPage;
@Test
public void testCase1() {
loginPage = new LoginPage(getDriver());
loginPage.sendkeys("sometext");
}
@Test
public void testCase2() {
loginPage = new LoginPage(getDriver());
loginPage.sendkeys("sometext");
}
我的问题是
很抱歉,如果我的查询很天真。任何帮助将不胜感激。
答案 0 :(得分:0)
您无需再次初始化它。另外,在@BeforeTest而不是在测试用例中初始化页面。
答案 1 :(得分:0)
这里我想举例说明Page对象模型。希望你能谈谈这个。
我的主要测试:
CurrentSelecton
现在支持班级:
GoToSignInPageForPropertyFile方法将在WebUtils中 无论我在Webutils中写什么,都会被每个页面对象类使用。
例如
@Before
public void SelectBrowser(){
driver = WebUtils.SelectBrowser(driver,"Chrome");
}
@Test
public void LoginToGmail() throws InterruptedException{
//WebDriver driver = new FirefoxDriver();
//MAximize the Screen
driver.manage().window().maximize();
//Go to Gmail Login Page
SignInPage SignInPage = new SignInPage();
WebUtils.GoToSignInPageForPropertyFile(driver, "URL");
//Click on Next
SignInPage.ClickToLogin(driver, By.cssSelector("input[id='next']"));
现在,ClickToLogin方法在SignInPage类下定义为:
public class WebUtils {
public static pageobject.SignInPage GoToSignInPageForPropertyFile(WebDriver driver, String URL) {
ReadFileData File = new ReadFileData();
Properties Values = File.ReadFile();
driver.get(Values.getProperty("URL"));
return PageFactory.initElements(driver, pageobject.SignInPage.class);
}
}
这将进一步在Webutils
public class SignInPage {
public EmailViewPage ClickToLogin(WebDriver driver, By by) {
WebUtils.Click(driver, by);
return PageFactory.initElements(driver, EmailViewPage.class);
}
}