2013-02-12 20 views
0

我使用Selenium 2 Web Driver與C#.Net創建了測試。在閱讀了很多Selenium文檔之後,我不確定是否遵循了正確的設計模式,並且不確定如何使用PageObject設計模式進行測試。使用PageFactory將我現有的代碼轉換爲PageObject設計模式

這裏是我當前的代碼,我用我的網頁上,其工作

WaitForElement(By.CssSelector("input#ctl00_ctl00_signinControl_txtUsername")).SendKeys("abc123"); 
WaitForElement(By.CssSelector("input#ctl00_ctl00_signinControl_txtPassword")).SendKeys("password"); 

SelectElement select; 
IWebElement selElement = WaitForElement(By.CssSelector("select#ctl00_ctl00_ddlGoTo")); 
select = new SelectElement(selElement); 
select.SelectByText("Homepage"); 

*<more code .....>* 

我也已經告訴我不能使用pageFactory使用Select頁面元素。

是否需要按我編碼的方式更改我的代碼?任何反饋都會很棒。

+0

爲什麼不能使用'Select'類?我看不出爲什麼沒有。頁面對象模式僅僅是將你的測試從他們的元素中分離出來,以及它們如何相互作用。你的測試*不應該關心如何找到一個元素,這是你的頁面對象的責任。 – Arran 2013-02-13 09:24:55

+0

如果您使用PageFactory,則每個屏幕控件都會自動實例化爲「WebElement」(而不是相應的子類,例如「Select」)。當您即將與屏幕控件進行交互時,您可以在運行時將'WebElement'強制轉換爲'Select' - 但它不是很乾淨;如果你可以首先將它初始化爲一個「選擇」,它會更好。 – 2013-04-30 11:13:11

回答

0

頁面對象模式的想法是有一個代表頁面的對象。你基本上正在編寫一個如何與頁面交互的API。

例如登錄頁面對象可以具有以下方法:

  • enterUserName(用戶名字符串);
  • enterPassword(String password);
  • clickLoginButton();

使用頁面對象與頁面交互的人不需要關心硒如何找到元素並與它們交互。如果字段上的ID發生更改,則只需更改頁面對象上的定位器,而不需要更改調用關聯頁面對象公共方法的所有測試。

+0

我只是在這裏指出,所描述的對象不會遵循頁面對象模式。充其量,它將被稱爲頁面包裝器。一個頁面對象會有一個像'login(String userName,String password)'這樣的方法,並且這些憑證將被傳遞給該方法。 – JimEvans 2013-02-14 20:46:01

+0

感謝您的糾正。我沒有意識到差異,直到你指出。我有像你所描述的登錄方法的方法,但發現我的測試需要控制輸入每個字段的順序,以至於幾乎每種方法都只與一個或兩個字段一起工作。我想最後的頁面包裝對我來說效果更好。 – jdumonti 2013-02-15 04:19:13

+0

是的,JimEvans說的。我寫了一篇文章,解釋了您可以接近頁面對象模式的方式。檢查出來http://www.paulsodimu.co.uk/Post/Implementing-the-Page-Object-Pattern-in-C-using-Selenium-WebDriver – 2015-01-06 17:21:57

相關問題