web-dev-qa-db-ja.com

Selenium Web Driverを使用してHTML入力の値を取得する

WebappのHTMLには次のコードがあります

<input type="text" name="prettyTime" id="prettyTime" class="ui-state-disabled prettyTime"  readonly="readonly">

ページに実際に表示されるのは、時間を表示する文字列です。

Selenium Web Driverには、<input>を参照するWebElementオブジェクトがあります。

WebElement timeStamp = waitForElement(By.id("prettyTime"));

WebElementの値、つまりページに印刷されるものを取得したい。すべてのWebElementゲッターを試しましたが、ユーザーに表示される実際の値を取得するものは何もありません。助けがありますか?ありがとう。

97
jamesfzhang

element.getAttribute("value")を試してください

textプロパティは、要素のタグ内のテキスト用です。入力要素の場合、表示されるテキストは<input>タグでラップされず、代わりにvalue属性内にあります。

注:大文字小文字は重要です。 「値」を指定すると、「null」値が返されます。これは少なくともC#には当てはまります。

181
prestomanifesto

あなたはこのようにすることができます:

webelement time=driver.findElement(By.id("input_name")).getAttribute("value");

これにより、Webページに表示する時間が与えられます。

22
Praveen

Selenium 2では、

私は通常それを次のように書きます:

WebElement element = driver.findElement(By.id("input_name"));
String elementval = element.getAttribute("value");

OR

String elementval = driver.findElement(By.id("input_name")).getAttribute("value");
15
e1che

pythonバインディングの場合:

element.get_attribute('value')
5
Sajid Manzoor

私が使用する@ragzzyの回答に従う

 public static string Value(this IWebElement element, IJavaScriptExecutor javaScriptExecutor)
    {

        try
        {
            string value = javaScriptExecutor.ExecuteScript("return arguments[0].value", element) as string;
            return value;
        }
        catch (Exception)
        {
            return null;
        }
    }

それは非常にうまく機能し、DOMを変更しません

5
Vfleitao

前に述べたように、あなたはそのようなことをすることができます

public String getVal(WebElement webElement) {
    JavascriptExecutor e = (JavascriptExecutor) driver;
    return (String) e.executeScript(String.format("return $('#%s').val();", webElement.getAttribute("id")));
}

しかし、ご覧のとおり、要素にはid属性が必要です。また、ページにjqueryが必要です。

4
raggzy

レイテンシーが関係するスクリプト(たとえば、AJAX呼び出し)によって入力値が取り込まれる場合、入力が取り込まれるまで待つ必要があります。例えば。

var w = new WebDriverWait(WebBrowser, TimeSpan.FromSeconds(10));
            w.Until((d) => {
                // Wait until the input has a value...

                var elements = d.FindElements(By.Name(name));

                var ele = elements.SingleOrDefault();

                if (ele != null)
                {
                    // Found a single element

                    if (ele.GetAttribute("value") != "")
                    {
                        // We have a value now
                        return true;
                    }
                }

                return false;
                });

        var e = WebBrowser.Current.FindElement(By.Name(name));

        if (e.GetAttribute("value") != value)
        {
            Assert.Fail("Result contains a field named '{0}', but its value is '{1}', not '{2}' as expected", name, e.GetAttribute("value"), value);
        }
1
saille