2016-12-15 18 views
1

Locator Selenium WebDriver PageオブジェクトでIWebElementを変換するには?Selenium LocatorでのSelenium IWebElementの変換方法C#では?

私はこのように動作:

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

のようにそれを使用するには、あなたの要素(例えば' txtUser')を渡し、その要素が見つかるまで待機するtry catchでそのメソッドを処理します。 Byロケータタイプの文字列を複製せずに、シナリオ作業の中で待ち合わせをする方法がわかりません。 IMO、要素の待機のための理想的なソリューションはこれです:http://stackoverflow.com/a/7312740/2246511しかし、私はどのようにPageObjectsでそれを使用できるかわかりません。 – jibbs

答えて

-1

クラスの先頭にロケータを宣言します。その後、

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

、あなたがこのモデルに固執しようとしている場合は、 `IWebElement`を取る別のメソッドを作成することができます

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

Ramonが既に持っているtxtUserプロパティのFindsBy属性で避けようとしている重複を依然として持っていて、あなたが推奨するuserLocatorフィールドにもう一度やり直してください。 – jibbs

+0

@jibbsはい、その時点で 'FindsBy'は必要ないので、重複は削除されます。 – JeffC

+1

@JeffCこのソリューションは重複を解決しませんが、私はこのような問題を解決しました:wait.Until(ExpectedConditions.ElementToBeClickable(+1 overload));ありがとう –

関連する問題