硒的webdriver获得的输入值,我需要解析包含在里面输入元素的表。使用硒的webdriver我得到的输入元素的列表,并提取其值:已经具有价值属性(JAVA)
@FindBy(xpath = "xpathSelector")
private List<WebElement> table;
输入元素的例子,我有:
<input id="pt1:r1:3:detailTable:1:j_idt680::content"
name="pt1:r1:3:detailTable:1:j_idt680" style="text-align: right;color:#333333;"
class="af_inputText_content" type="text" value="1,000.00">
通过迭代输入网络元素,我需要得到每个值。
List<String> inputValues = new ArrayList<>();
for (WebElement input : table) {
inputValues.add(getValue(input));
}
我可以用
input.getAttribute("value");
但是,这并不工作,因为输入元素已经有一个定义的属性“值”。
我发现,在这种情况下,我可以使用JavaScript。这是我想要的代码:
public String getValue(input) {
JavascriptExecutor js = (JavascriptExecutor) driver;
return js.executeScript("return arguments[0].value", element).toString();
}
但不是真正的价值我得到“脏”不作任何意义。
我能够用得到的调试器模式的真正价值:
((JavascriptExecutor)driver).executeScript("return document.evaluate(\"xpathSelector\",
document, null, XPathResult.FIRST_ORDERED_NODE_TYPE,null).singleNodeValue.value")
.toString()
我怎样才能获得通过JavascriptExecutor值已经使用硒的webdriver WebElements发现了什么?
更新:我发现使用CSS选择器问题的解决方法,但我不喜欢它:
public String getNthInputValueByCss(String cssSelector, int elementNumber) {
String jsScript = String.format("return document.querySelectorAll(\"%s\")[%d].value", cssSelector, elementNumber);
JavascriptExecutor js = (JavascriptExecutor) driver;
return js.executeScript(jsScript).toString();
}
我不明白'返回参数[0] .value'和'input.getAttribute(“value”)之间的区别;'我认为两者都会检索相同的数据。差异只是技术上的还是我错过了什么? –
@Würgspaß不幸的不是。 input.getAttribute(“value”)只有在元素没有定义属性“value”时才会返回值。以下是我输入的示例,它已具有属性“值”: – Aliaksei
你正在测试的页面是否有jQuery? – Josh