Java 如何通过getAttribute()或executeScript()方法提取输入字段的值?

Java 如何通过getAttribute()或executeScript()方法提取输入字段的值?,java,selenium,selenium-webdriver,webdriver,getattribute,Java,Selenium,Selenium Webdriver,Webdriver,Getattribute,有一个id为条件的输入字段,getText()和getAttribute()不起作用 driver.findElement(By.id("condition")).getText() //is not working.. 所以我试着在控制台里 document.getElementById("condition").value //return the value. 所以我试过了 JavascriptExecutor jse = (JavascriptExecutor) driver;

有一个id为条件的输入字段,
getText()
getAttribute()
不起作用

driver.findElement(By.id("condition")).getText() //is not working.. 
所以我试着在控制台里

document.getElementById("condition").value //return the value. 
所以我试过了

JavascriptExecutor jse = (JavascriptExecutor) driver;
System.out.println(jse.executeScript("document.getElementById(condition).value");
String value = jse.executeScript("document.getElementById(condition).value").toString();
AssertVerify(value, "15");
获取以下错误:

org.openqa.selenium.WebDriverException: JavaScript error (WARNING: The server did not provide any stacktrace information)

如何使用javascript获取值并分配给其他变量。

您的代码试用版近乎完美。您需要在单引号内传递元素的
id
属性,即
“…”
,如下所示:

String value = ((JavascriptExecutor)driver).executeScript("document.getElementById('condition').value").toString();

更新 由于您仍然无法通过
executeScript()
方法检索该值,因此需要引导WebDriverWait以使所需元素可单击,并且可以使用以下解决方案:

  • 使用
    getAttribute()
    检索文本:

    String myText = new WebDriverWait(driver, 20).until(ExpectedConditions.elementToBeClickable(By.id("condition"))).getAttribute("value");
    
    WebElement myElem = new WebDriverWait(driver, 20).until(ExpectedConditions.elementToBeClickable(By.id("condition")));
    String value = ((JavascriptExecutor)driver).executeScript("document.getElementById('condition').value").toString();
    
  • 使用
    executeScript
    检索文本:

    String myText = new WebDriverWait(driver, 20).until(ExpectedConditions.elementToBeClickable(By.id("condition"))).getAttribute("value");
    
    WebElement myElem = new WebDriverWait(driver, 20).until(ExpectedConditions.elementToBeClickable(By.id("condition")));
    String value = ((JavascriptExecutor)driver).executeScript("document.getElementById('condition').value").toString();
    

您的代码试用版近乎完美。您需要在单引号内传递元素的
id
属性,即
“…”
,如下所示:

String value = ((JavascriptExecutor)driver).executeScript("document.getElementById('condition').value").toString();

更新 由于您仍然无法通过
executeScript()
方法检索该值,因此需要引导WebDriverWait以使所需元素可单击,并且可以使用以下解决方案:

  • 使用
    getAttribute()
    检索文本:

    String myText = new WebDriverWait(driver, 20).until(ExpectedConditions.elementToBeClickable(By.id("condition"))).getAttribute("value");
    
    WebElement myElem = new WebDriverWait(driver, 20).until(ExpectedConditions.elementToBeClickable(By.id("condition")));
    String value = ((JavascriptExecutor)driver).executeScript("document.getElementById('condition').value").toString();
    
  • 使用
    executeScript
    检索文本:

    String myText = new WebDriverWait(driver, 20).until(ExpectedConditions.elementToBeClickable(By.id("condition"))).getAttribute("value");
    
    WebElement myElem = new WebDriverWait(driver, 20).until(ExpectedConditions.elementToBeClickable(By.id("condition")));
    String value = ((JavascriptExecutor)driver).executeScript("document.getElementById('condition').value").toString();
    

应该是
“document.getElementById('condition').value”
,在
condition
周围加上撇号。您是如何尝试
getAttribute()
getAttribute(“value”)
应该可以工作。正如@Guy所说,对于输入文本框,您必须使用
getAttribute(“value”)
读取其中的键入字符串。对于其他控件,应该使用只能获取控件只读文本的
getText()
。对于您的案例,无需使用
executeScript
。它应该是
“document.getElementById('condition').value”
,并在
condition
周围加上撇号。您是如何尝试
getAttribute()
getAttribute(“value”)
应该可以工作。正如@Guy所说,对于输入文本框,您必须使用
getAttribute(“value”)
读取其中的键入字符串。对于其他控件,应该使用只能获取控件只读文本的
getText()
。无需为您的案例使用
executeScript
。为元素id添加了single,但返回null,但在控制台中运行时返回值。请尝试第二个。。第一个不起作用,因为我已经提到了。请测试更新后的答案,并让我知道状态。为元素id添加了single,但返回null,但在控制台中运行时返回值。请尝试第二个。。第一个不起作用,因为我已经提到了。请尝试更新答案,并让我知道状态。