2016-12-15 77 views
1

如何在Locator Selenium WebDriver頁面對象中轉換IWebElement?如何通過C#將Selenium定位器中的Selenium IWebElement轉換爲?

我的工作是這樣的:

using OpenQA.Selenium.Support.PageObjects; 
     [FindsBy(How = How.Id, Using = "user")] 
     public IWebElement txtUser { get; set; } 

     public void fillUserField(string user) 
     { 
      wait.Until(ExpectedConditions.ElementIsVisible(By.Id("user"))); 
      txtUser.SendKeys(user); 
     } 

我不想重複在等待ID爲「用戶」。

我不工作是這樣的:

public void fillUserField(string user) 
    { // TO DO - Convert IWebElement in Locator (BY) 
     //Argument1: Cannot convert from 'OpenQA.Selenium.IWebElement' to 'OpenQA.Selenium.By' 
     wait.Until(ExpectedConditions.**ElementIsVisible(txtUser)**); 
     txtUser.SendKeys(user); 
    } 

是可能的?謝謝!

+0

如果你想用這個模型來堅持,你可以創建一個單獨的方法,它'IWebElement',通過它你的元素(例如'txtUser')然後用try catch處理該方法,直到元素被找到/準備好/可見。我看不到如何在你的場景中做「等待」而不復制By locator類型的字符串。國際海事組織,等待元素的理想解決方案是這樣的:http://stackoverflow.com/a/7312740/2246511但我不知道你可以如何使用它與PageObjects。 – jibbs

回答

-1

你會在類的頂部聲明一個定位器。

public By userLocator = By.Id("user"); 

,然後使用它像

wait.Until(ExpectedConditions.ElementIsVisible(userLocator)); 
+1

您仍然可以通過他已經擁有的txtUser屬性的FindsBy屬性嘗試避免重複,然後再次在您推薦的userLocator字段中進行重複。 – jibbs

+0

@jibbs是的,但他不需要'FindsBy',所以重複將被刪除。 – JeffC

+1

@JeffC這個解決方案沒有解決重複問題,但我解決了這樣的問題:wait.Until(ExpectedConditions.ElementToBeClickable(+1 overload));謝謝 –

相關問題