【发布时间】:2014-09-18 19:15:53
【问题描述】:
请帮忙: 我正在使用带有页面对象模式的 cucumber-jvm+WebDriver+jUnit+maven 进行自动化测试。
我想要一个可以返回多种类型对象的方法。 (不同的预期页面)。 在我过去,我使用泛型通过清晰的 java+Webdriver 来实现它。 在This Post 中有一个很好的解释。
但现在我想用黄瓜来补充它。
我的项目结构如下所示:
驱动基类:
public class DriverBase {
public static WebDriver driver;
@Before
public void setUp() {
driver = new FirefoxDriver();
@After
public void tearDown() throws Exception {
driver.quit();
}
}
用于页面对象之间交互的导航器类:
public class Navigator {
DriverBase base;
WebDriver driver;
public NavigationActions(DriverBase base) {
this.base = base;
this.driver = base.driver;
}
public FirstPage openFirstPage(){
driver.get("someUrl");
return new FirstPage(base);
}
}
页面对象类:
public class FirstPage {
WebDriver driver;
DriverBase base;
//...
//Elements locators...
//Some methods...
//...
public FirstPage(DriverBase base) {
this.base = base;
this.driver = base.driver;
PageFactory.initElements(driver, this);
}
public <T> T openSecondOrThirdPage(String secondPgUrl, Class<T> expectedPage) {
driver.get("secondPgUrl");
return PageFactory.initElements(driver, expectedPage);
}
和
public class SecondPage {
WebDriver driver;
DriverBase base;
//...
//Elements locators...
//Some methods...
//...
public SecondPage(DriverBase base) {
this.base = base;
this.driver = base.driver;
PageFactory.initElements(driver, this);
}
}
我的 StepsDefinition 类:
public class MyTestStepsDefs {
DriverBase base;
Navigator navigator;
@Given("^bla-bla$"){
public void go_from_first_to_second_page() {
navigator.openFirstPage().openSecondOrThirdPage("http://urlOfMyPage.com", SecondPage.class);
}
@When("^blu-blu$")
public void login_with_selected_role() {
System.out.println("Some log");
}
@Then("^blo-blo$")
public void check_links_available(List<String> availableLinks) {
System.out.println("Some log");
}
所以,当我运行这个黄瓜测试时 - 在 openSecondOrThirdPage 方法上出现错误:
java.lang.RuntimeException: java.lang.InstantiationException: myprjct.pages.SecondPage
at org.openqa.selenium.support.PageFactory.instantiatePage(PageFactory.java:136)
at org.openqa.selenium.support.PageFactory.initElements(PageFactory.java:66)
at myprjct.pages.FirstPage.openSecondOrThirdPage(FirstPage.java:31)
.......
Caused by: java.lang.InstantiationException: myprjct.pages.SecondPage
at java.lang.Class.newInstance(Class.java:359)
at org.openqa.selenium.support.PageFactory.instantiatePage(PageFactory.java:133)
at org.openqa.selenium.support.PageFactory.initElements(PageFactory.java:66)
........
请建议我,我做错了什么?
【问题讨论】:
-
正如我所见,方法被声明为接受字符串类型的参数和泛型类
openSecondOrThirdPage(String secondPgUrl, Class<T> expectedPage)但我假设你传递了错误的参数openSecondOrThirdPage(driver, SecondPage.class)因为我打赌你的driver是 WebDriver 类的一个实例.不是吗? -
是的,你是对的。 - 我已修复它 - 当我为帖子编写此示例时,这只是一个错误。
标签: java generics webdriver cucumber pageobjects