2016-05-26 30 views
2

我有4個頁面,其元素和功能非常相似。但是,這些元素都有不同的ID,具體取決於您所在的頁面。目前,我有他們構建如下(例如A類& B類)。我想重構這個,因爲所有的方法在兩個類之間是相同的,但是我不知道該怎麼做,因爲元素有不同的ID(我使用Page Factory,但是我願意不使用它)。Selenium Webdriver C#帶有相似元素的頁面

任何洞察力非常感謝!

public class A : BaseClass 
{ 
    [FindsBy(How = How.Id, Using = "ALoginId"] 
    public IWebElement Login {get; set;} 

    [FindsBy(How = How.Id, Using = "APassword"] 
    public IWebElement Password {get; set;} 

    [FindsBy(How = How.Id, Using = "ALoginBtn"] 
    public IWebElement LoginBtn {get; set;} 

    public void Login() 
    { 
     Login.SendKeys("username"); 
     Password.SendKeys("password"); 
     LoginBtn.Click(); 
    } 
} 

public class B : BaseClass 
{ 
    [FindsBy(How = How.Id, Using = "BLoginId"] 
    public IWebElement Login {get; set;} 

    [FindsBy(How = How.Id, Using = "BPassword"] 
    public IWebElement Password {get; set;} 

    [FindsBy(How = How.Id, Using = "BLoginBtn"] 
    public IWebElement LoginBtn {get; set;} 

    public void Login() 
    { 
     Login.SendKeys("username"); 
     Password.SendKeys("password"); 
     LoginBtn.Click(); 
    } 
} 
+0

你知道一點JAVA嗎。我可以在JAVA中顯示它。 –

+0

我只能說,在 [FindsBy(如何= How.Id,使用= 「ALoginId」] 公共IWebElement登錄{獲取;集;} 繼續使用=一些變量和更改登錄元素: [FindsBy(如何= How.Id,使用=字符串] 公共IWebElement元素{獲取;集;}。 現在通過用戶名,密碼和loginbutton 3個不同的方法,通過這個元素和字符串 很抱歉,但我不知道C#希望你能和它聯繫嗎?回覆:-) –

+0

我確實知道Java,所以如果你能告訴我一個例子,我會很感激的, – AngieM

回答

0

如果有喜歡的名稱相似的其他領域,類,你可以用這個來代替ID。

而且這裏有方法,您可以使用此:

public class A : BaseClass 
{ 
    private String loginWindow; 

    [FindsBy(How = How.Id, Using = "ALoginId"] 
    public IWebElement Login {get; set;} 

    [FindsBy(How = How.Id, Using = "APassword"] 
    public IWebElement Password {get; set;} 

    [FindsBy(How = How.Id, Using = "ALoginBtn"] 
    public IWebElement LoginBtn {get; set;} 

    [FindsBy(How = How.Id, Using = "BLoginId"] 
    public IWebElement Loginb {get; set;} 

    [FindsBy(How = How.Id, Using = "BPassword"] 
    public IWebElement Passwordb {get; set;} 

    [FindsBy(How = How.Id, Using = "BLoginBtn"] 
    public IWebElement LoginBtnb {get; set;} 

    public A(Srting loginwindow){ 
      this.loginWindow; = loginwindow; 
    } 

    public void Login() 
    { 
     if(loginwindow.equals("A")) { 
      Login.SendKeys("username"); 
      Password.SendKeys("password"); 
      LoginBtn.Click(); 
     } 
     elseif(loginwindow.equals("B")){ 
      Loginb.SendKeys("username"); 
      Passwordb.SendKeys("password"); 
      LoginBtnb.Click(); 
     } 
     else{ 
      throws new Execption("Please provide correct login Window name") 
     } 
    } 
} 
+0

這是相同數量的工作:(。我試圖拍攝的是能夠一次而不是多次執行登錄功能。 – AngieM

+0

在上面的方法中,您有一個登錄功能 –

+0

是的,但我試圖合併,必須多次對以下3行進行編碼。{Loginb.SendKeys(「username」); Passwordb.SendKeys(「password」); LoginBtnb.Click();}。這個問題沒有多種方法,但這些方法的內容基本相同。如果可能的話,我正試圖避免這種情況。 – AngieM

0

參見下面的例子..

我的測試是

//MAximize the Screen 
driver.manage().window().maximize(); 
//Go to Gmail Login Page 
SignInPage SignInPage = WebUtils.GoToSignInPage(driver); 
//Sign in to Login page -Send Username 
SignInPage.SendkeysMethodForSignInPAge(driver, By.cssSelector("input[id='Email']") , "[email protected]"); 
//Click on Next 
SignInPage.ClickToLogin(driver, By.cssSelector("input[id='next']")); 
//Wait for password field to be visible 
SignInPage.WaitForElementTobeVisible(driver, By.cssSelector("input[id='Passwd'][type='password']")); 

所以當我調用該方法SendkeysMethodForSignInPAge我不會寫它在@Test中。

見SendkeysMethodForSignInPAge方法:

public class SignInPage { 

    public void SendkeysMethodForSignInPAge(WebDriver driver, By by, String s) { 
WebUtils.Sendkeys(driver,by,s); 
    } 
} 

那麼的SendKeys是將無處不在使用,因此這將是一個類卡萊webutils常用的方法。

public class WebUtils { 
    public static void Sendkeys(WebDriver driver, By by, String s) { 
     WebElement Element = driver.findElement(by); 
     Element.clear(); 
     Element.sendKeys(s); 
    } 
} 

我創建了一個新的類別,而且我定義它。這是基本流程。希望你能把這個聯繫起來。回覆我,如果你仍然卡住了。快樂學習:-)

相關問題