1

I tried to test the addition operation of 1 + 7 below; but don't know how to get the result output of the text field whose attribute "name" is "Input".

Any pointer would be appreciated.


package hw9;

import java.util.concurrent.TimeUnit;
import org.junit.*;
import static org.junit.Assert.*;
import org.openqa.selenium.*;
import org.openqa.selenium.firefox.FirefoxDriver;

public class calculator {
  private WebDriver driver;
  private String baseUrl;

  @Before
  public void setUp() throws Exception {
    driver = new FirefoxDriver();
    baseUrl = "http://www.math.com/";
    driver.manage().timeouts().implicitlyWait(30, TimeUnit.SECONDS);
  }

  @Test
  public void testCalculator() throws Exception {
    driver.get(baseUrl + "/students/calculators/source/basic.htm");
    driver.findElement(By.name("one")).click();
    driver.findElement(By.name("plus")).click();
    driver.findElement(By.name("seven")).click();
    driver.findElement(By.name("DoIt")).click();

    String output = driver.findElement(By.name("Input")).getText();
    System.out.println("Output: " + output);  // **<--- Empty output**
    assertEquals(8,output);

  }

  @After
  public void tearDown() throws Exception {
      driver.quit();
  }
}

HTML of code in question is listed below:


      <td> 
        <div align="center"> <font size="+1"> 
          <input name="Input" type="text" size="16">
          </font></div>
      </td>
user1972031
  • 547
  • 1
  • 5
  • 19

1 Answers1

6

Try driver.findElement(By.name("Input")).getAttribute("value").

element.getText() is used to get the text node inside a tag, for example <tagname>text</tagname>.

But, an input does not have the text inside the tag (represented by a node), but inside the value attribute; for example: <input type="text" value="SomeValue">.

So, if you want to get the node text inside an element, you have to use element.getText(), but if you want to get the value of an input, you have to use element.getAttribute("value").

budi
  • 6,351
  • 10
  • 55
  • 80
Thisisalexis
  • 104
  • 5
  • There's no value attribute. – user1972031 Jun 28 '17 at 02:53
  • 2
    I believe this should work, see https://stackoverflow.com/questions/7852287/using-selenium-web-driver-to-retrieve-value-of-a-html-input – budi Jun 28 '17 at 03:10
  • Hello, @user1972031! If there is not any value attribute, it means the value or text of the input is empty; in this case, when you call element.getAttribute("value"), this is going to return null. – Thisisalexis Jun 28 '17 at 04:01
  • 1
    Hello, @user1972031! I'm pretty sure that If your input has some visible text (it means, you can see it in the html page from the browser), then it has a value attribute with that text. If there is not any value attribute, it means the value or text of the input is empty; in this case, when you call element.getAttribute("value"), this is going to return null. If it is the case, then you have to check your SUT (System Under Test), which is not setting properly the value of the input, not your selenium script. – Thisisalexis Jun 28 '17 at 04:10
  • 1
    @budi: The link "https://stackoverflow.com/questions/7852287/using-selenium-web-driver-to-retrieve-value-of-a-html-input" that you provided has a good explanation (quoted verbatim below): -------------------------------------------------------------- Well, it turns out that if the attribute is missing, it will try to get the corresponding property. So you can take a "value" from a textarea. – C-F -------------------------------------------------------------- – user1972031 Jun 28 '17 at 05:00
  • @budi Great Explanation +1 – undetected Selenium Jun 28 '17 at 05:45