it-swarm-id.com

Menggunakan Selenium Web Driver untuk mengambil nilai input HTML

Dalam HTML webapp ada kode berikut

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

Apa yang sebenarnya ditampilkan pada halaman adalah string yang menampilkan waktu.

Di Selenium Web Driver, saya memiliki objek WebElement yang merujuk ke <input> menggunakan

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

Saya ingin mendapatkan nilai dari WebElement, atau, dengan kata lain, apa yang dicetak pada halaman. Saya mencoba semua getter WebElement dan tidak ada yang mengambil nilai aktual yang dilihat pengguna. Ada bantuan? Terima kasih.

86
jamesfzhang

Coba element.getAttribute("value")

Properti text adalah untuk teks di dalam tag elemen. Untuk elemen input, teks yang ditampilkan tidak dibungkus oleh tag <input>, melainkan di dalam atribut value.

Catatan: Hal-hal penting. Jika Anda menentukan "Nilai", Anda akan mendapatkan nilai 'nol' kembali. Setidaknya ini berlaku untuk C #.

162
prestomanifesto

Anda bisa melakukan ini:

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

ini akan memberi Anda waktu menampilkan di halaman web.

20
Praveen

Dengan Selenium 2, 

saya biasanya menulis seperti itu:

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

Mengikuti jawaban @ragzzy yang saya gunakan

 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;
        }
    }

Ini bekerja dengan sangat baik dan tidak mengubah DOM

5
Vfleitao

Seperti yang disebutkan sebelumnya, Anda bisa melakukan hal seperti itu

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

Tetapi seperti yang Anda lihat, elemen Anda harus memiliki atribut id, dan juga, jquery pada halaman Anda.

4
raggzy

Untuk binding python akan menjadi:

element.get_attribute('value')
2
Sajid Manzoor

Jika nilai input diisi oleh skrip yang melibatkan latensi (mis. AJAX panggil) maka Anda harus menunggu hingga inputnya diisi . E.g.

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