0

私は書かれたテストを持っており、テストは実行され、SeleniumChromeDriverを使ってうまく動作します。私はFirefoxDriverでもテストを受けさせることを任されました。WebElementのGetAttributeをSelenium Firefoxドライバが空に戻す

テストの一部では、テキストをログインフィールドに入力し、ログインフィールドが入力されていることを確認します。フィールドを確認する方法は次のとおりです

public virtual string Text => WebElement.GetAttribute("value"); 
while (!Text.Equals(inputText) && count++ < 3) 

これはChromeで完璧に機能します。しかし、それはFirefoxにはありません。テストをデバッグすると、Text""または空白/空白であることが示されます。 Firefoxを開くと、私はこれを行うことができますdocument.getElementById("login").valueとそれは正しい値を返します。

FirefoxDriverではWebElement.GetAttributeが異なって実装されていますか、それとも何か不足していますか?

答えて

2

あなたの場合、なぜFirefoxで作業していないと言うのは難しいですが、ブラウザ間で実装は異なります。あなたは以下のように代わりにIJavascriptExecutorを使用して、代替ソリューションを試すことができます: -

IJavaScriptExecutor js = driver as IJavaScriptExecutor; 
string Text = (string)js.ExecuteScript("return arguments[0].value", WebElement); 
1

属性/プロパティはセレン2、HTMLElementプロパティを返しますWebElement.GetAttribute(...)方法ではセレン3.

で進化してきたGETにセレンプロトコル存在し、属性はそれ以外の場合。セレン3で

、プロパティおよび属性のための1つを取得するための独特のコマンドがあります:あなたのケースでは https://www.w3.org/TR/webdriver/#get-element-property

あなたがセレンに限定されたクライアントとgeckodriver(セレン3)を使用しているようです2仕様。なぜプロパティが返されないのか説明します。

あなたはV3.0.0-β2にあなたのC#クライアントをアップグレードするか、それを動作させるには: https://github.com/SeleniumHQ/selenium/blob/master/dotnet/CHANGELOG https://github.com/SeleniumHQ/selenium/commit/a573338f7f575ccb0069575700f2c059dc94c3b8

それとも、メソッドの拡張機能では、独自のGetPropertyを実装することができます

static string GetProperty(this IWebElement element, string property) { 
    var driver = (RemoteWebDriver)((RemoteWebElement)element).WrappedDriver; 
    var result = (IList)driver.ExecuteScript(@" 
     var element = arguments[0], property = arguments[1]; 
     if (property in element) return [true, '' + element[property]]; 
     return [false, 'Missing property: ' + property]; 
     ", element, property); 

    bool succeed = (bool)result[0]; 
    if (!succeed) throw new WebDriverException((string)result[1]); 

    return (string)result[1]; 
} 

使用法:

string value = driver.FindElement(...).GetProperty("value"); 
+0

これは意味があります。私はgeckodriverとSelenium 3.0 beta2を使用していましたが、Visual StudioはGetPropertyが何らかの理由で無効であると主張し続けました。私はSaurabh GaurのポストでJavascriptを使用する必要がありました。 – Cistoran

関連する問題