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
ゲッターを試しましたが、ユーザーに表示される実際の値を取得するものは何もありません。助けがありますか?ありがとう。
element.getAttribute("value")
を試してください
text
プロパティは、要素のタグ内のテキスト用です。入力要素の場合、表示されるテキストは<input>
タグでラップされず、代わりにvalue
属性内にあります。
注:大文字小文字は重要です。 「値」を指定すると、「null」値が返されます。これは少なくともC#には当てはまります。
あなたはこのようにすることができます:
webelement time=driver.findElement(By.id("input_name")).getAttribute("value");
これにより、Webページに表示する時間が与えられます。
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");
pythonバインディングの場合:
element.get_attribute('value')
私が使用する@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を変更しません
前に述べたように、あなたはそのようなことをすることができます
public String getVal(WebElement webElement) {
JavascriptExecutor e = (JavascriptExecutor) driver;
return (String) e.executeScript(String.format("return $('#%s').val();", webElement.getAttribute("id")));
}
しかし、ご覧のとおり、要素にはid
属性が必要です。また、ページにjqueryが必要です。
レイテンシーが関係するスクリプト(たとえば、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);
}