Java 使用泛型的Selenium Webdriver和类型构造函数-如何实现
在selenium 2 webdriver中使用PageFactory设计的最佳方法是什么?但是,当一个页面并不总是加载预期的页面时,如何创建新的意外页面Java 使用泛型的Selenium Webdriver和类型构造函数-如何实现,java,generics,webdriver,selenium-webdriver,dynamic-class-creation,Java,Generics,Webdriver,Selenium Webdriver,Dynamic Class Creation,在selenium 2 webdriver中使用PageFactory设计的最佳方法是什么?但是,当一个页面并不总是加载预期的页面时,如何创建新的意外页面 public class PassengerPage { [FindsBy(How = How.Id, Using "submitId") IWebElement submitButton { get; set; } private readonly IWebDriver driver;
public class PassengerPage
{
[FindsBy(How = How.Id, Using "submitId")
IWebElement submitButton { get; set; }
private readonly IWebDriver driver;
public PassengerPage(IWebdriver driver)
{
if(!driver.url.Contains"Passengers.aspx")
{
throw new NotFoundException("Not the passenger page");
}
this.driver = driver;
PageFactory.InitElements(driver, this);
}
public PassengerPage NewPassenger(Passenger p)
{
// fill out some forms
// Example:
// someInputField.sendKeys(p.Name);
submitButton.Click(); // Ok, submit clicked, possibility of passenger page
// not coming back, depending on how many passengers were filled out
// But what if its not...
return new PassengerPage(driver);
}
}
//如果在submitButton.Click()之后返回的页面会怎样;是Confirmation.aspx页面吗?我不能百分之百确定,这取决于以前的要求,例如登录,然后说需要多少乘客,但此页面中没有存储此信息
我可以使用某种类型的构造函数吗
那么我可以做如下的事情:
public class PassengerPage
{
[FindsBy(How = How.Id, Using "submitId")
IWebElement submitButton { get; set; }
private readonly IWebDriver driver;
public PassengerPage(IWebdriver driver)
{
if(!driver.url.Contains"Passengers.aspx")
{
throw new NotFoundException("Not the passenger page");
}
this.driver = driver;
PageFactory.InitElements(driver, this);
}
public Page<T> NewPassenger(Passenger p)
{
// fill out some forms
// Example:
// someInputField.sendKeys(p.Name);
submitButton.Click(); // Ok, submit clicked, possibility of passenger page
// not coming back, depending on how many passengers were filled out
var wait = new WebDriverWait(driver, TimeSpan.FromSeconds(30));
wait.Until(d => d.url.Contains("Passenger.aspx") || d => d.url.Contains("Confirmation.aspx");
if(driver.Url.Contains("Passenger.aspx")
{
return Page.Create<PassengerPage>(driver);
}
if(driver.Url.Contains("Confirmation.aspx")
{
return Page.Create<ConfirmationPage>(driver);
}
}
}
[Test(Description = "Some description about my unit test")
public void TestAddPassengerAndConfirm()
{
new LoginPage(driver).Login("username", "password")
.NavigateToSearch()
.Search( /* input search criteria */ )
.SelectSearchResult(Result.First)
.AddPassenger(new Passenger()
{
FirstName = "first",
LastName = "last",
})
.AddPassenger(new Passenger()
{
// More properties
})
.ConfirmPassengers() // This would be a function on my ConfirmationPage
// That would return the HomePage or something
}
有没有关于如何执行此操作的建议?您必须将该方法链拆分为多个语句。在C#中,我会做如下的事情。它没有那么漂亮(如果你相信方法链接的话),也没有那么容易,但是如果编程很容易,我们就不会得到报酬
public void TestAddPassengerAndConfirm()
{
Page uncertainPage = new LoginPage(driver).Login("username", "password")
.NavigateToSearch()
.Search( /* input search criteria */ )
.SelectSearchResult(Result.First);
if (uncertainPage is PassengerPage)
{
PassengerPage passengerPage = (PassengerPage) uncertainPage;
uncertainPage = passengerpage.AddPassenger(new Passenger()
{
FirstName = "first",
LastName = "last",
})
.AddPassenger(new Passenger()
{
// More properties
});
}
if (uncertainPage is ConfirmationPage)
{
ConfirmationPage confirmationPage = (ConfirmationPage) uncertainPage;
confirmationPage.ConfirmPassengers();
}
}
听起来是个好主意,事实上,我在我的乘客页面中提出了类似的想法+我想,这比使用类型构造函数要简单一些,因为我现在不擅长这些东西
public void TestAddPassengerAndConfirm()
{
Page uncertainPage = new LoginPage(driver).Login("username", "password")
.NavigateToSearch()
.Search( /* input search criteria */ )
.SelectSearchResult(Result.First);
if (uncertainPage is PassengerPage)
{
PassengerPage passengerPage = (PassengerPage) uncertainPage;
uncertainPage = passengerpage.AddPassenger(new Passenger()
{
FirstName = "first",
LastName = "last",
})
.AddPassenger(new Passenger()
{
// More properties
});
}
if (uncertainPage is ConfirmationPage)
{
ConfirmationPage confirmationPage = (ConfirmationPage) uncertainPage;
confirmationPage.ConfirmPassengers();
}
}