C#.NetでSelenium 2 Web Driverを使用してテストを作成しています。 Seleniumのドキュメントをたくさん読んだ後も、PageObjectのデザインパターンを使ってテストする方法についてはまだ分かりません。Selenium PageObjectデザインパターンを使用する最良の方法は
セレンの例の多くはJavaでのみ表示されています.Net用のAPIバインディングは、制限や特定の言語によって設定された基準に起因するとは限りません。
.Net Selenium Web DriverのPageFactoryでPageObjectデザインパターンを使用する最も良い方法は何ですか?
PageObject IWebElementsを使用したNUnitテストではなく、より多くの機能を処理するようにしたいと考えています。
以下は、私が現在テストを作成する方法の例です。
[TestFixture]
public class LoginPageTest : TestBase
{
private IWebDriver driver;
private LoginPage loginPage;
private HomePage homePage;
[SetUp]
[Description("Sets up the test fixture page objects and navigates to the login page.")]
public void SetUp()
{
driver = StartDriver();
Log.Info("Driver started");
driver.Navigate().GoToUrl("http://" + Environment + ");
loginPage = new LoginPage();
PageFactory.InitElements(driver, loginPage);
//driver.Navigate().Refresh();
}
[Test]
[Description("Enters invalid credentials and asserts that a correct error message is displayed.")]
public void SubmitFormInvalidCredentials()
{
loginPage.UserName.SendKeys("invalid");
loginPage.Password.SendKeys("invalid");
loginPage.SubmitButton.Click();
IWebElement invalidCredentials = driver.FindElement(By.Id("ctl00_ctl00_ctl00_insideForm_insideForm_ctl02_title"));
Assert.AreEqual("Invalid user name or password", invalidCredentials.Text);
}
[Test]
[Description("Enters valid credentials and asserts that the user is taken to the home page.")]
public void SubmitFormValidCredentials()
{
loginPage.UserName.SendKeys("valid");
loginPage.Password.SendKeys("valid");
loginPage.SubmitButton.Click();
homePage = new HomePage();
PageFactory.InitElements(driver, homePage);
Assert.AreEqual("pattest", homePage.Username.Text);
}
}
私はセレンwebdriverをデザインパターンを見つけるの記事やブログ記事のほとんどは、私が見つける前のポストに矛盾を放つ:これは私は現在、NUnitのでやっているものです瞬間
public class LoginPage
{
private IWebDriver webDriver;
[FindsBy(How = How.Id, Using = "ctl00_ctl00_ctl00_insideForm_insideForm_content_txtPassword")]
public IWebElement Password { get; set; }
[FindsBy(How = How.Id, Using = "ctl00_ctl00_ctl00_insideForm_insideForm_content_cmdSubmit")]
public IWebElement SubmitButton { get; set; }
[FindsBy(How = How.Id, Using = "ctl00_ctl00_ctl00_insideForm_insideForm_content_txtUserName")]
public IWebElement UserName { get; set; }
public LoginPage() { }
public LoginPage(IWebDriver webDriver)
{
this.webDriver = webDriver;
if(!webDriver.Url.Contains("Login.aspx"))
{
throw new StaleElementReferenceException("This is not the login page");
}
PageFactory.InitElements(webDriver, this);
}
public HomePage signIn(string username, string password)
{
UserName.SendKeys(username);
Password.SendKeys(password);
SubmitButton.Submit();
// Even if i create a NUnit test for this
// Issue with page loading still occures when I try and return new object
HomePage homePage = new HomePage(webDriver);
PageFactory.InitElements(webDriver, homePage);
return homePage;
}
}
。
だから、正しい方法は何ですか?
これを取り除くために、PageObjectデザインパターンを試してみました。
私LoginPageインサイドpublic LoginPage(IWebDriver driver)
{
this.driver = driver;
if (!driver.Url.Contains("Login.aspx"))
{
throw new ElementNotFoundException("This is not the login page");
}
PageFactory.InitElements(driver, this);
}
public HomePage SignIn(string username, string password)
{
UserName.SendKeys(username);
Password.SendKeys(password);
SubmitButton.Click();
return new HomePage(driver);
}
そして、もちろん私のホームページは、そのコンストラクタで開始する方法を示すために:
私はと効果的にwebdriverをのPageObjectデザインパターンを使用するにはどうすればよいpublic HomePage(IWebDriver d)
{
webDriver = d;
// I need to use this as its not freaking waiting for my Page to load when I pass the webdriver in the consturctor.
var wait = new WebDriverWait(webDriver, TimeSpan.FromSeconds(60));
try
{
wait.Until(driver => driver.FindElement(By.Id("ctl00_ctl00_ctl00_insideForm_insideForm_loginStatus")));
}
catch(Exception e)
{
throw new ElementNotFoundException("This is not the home page.");
}
PageFactory.InitElements(webDriver, this);
}
テスト。 私はこれを理解できません。
はい、これは私がプロジェクトを始めたときに終わった構造です。 +1 –
質問、もしあなたの要素がpageobjectの 'Select'(ドロップダウンリスト)ならどうしますか?私はあなたが選択(ドロップダウンリスト)のためにpageobjectを使用することはできないと言われているそれは本当ですか? –
誰かが@Nick Kahnの質問にお答えできますか?私は同じ問題を抱えています。 –