Calculation of Selenium JavascriptExecutor

I tried to make an example on JavaScriptExecutor.

Test site: http://www.anaesthetist.com/mnm/javascript/calc.htm

Testing scenario: 3 + 9 = 12 (addition)

I wrote the code below, but that didn't work. I am debugging the code, I saw 12 as a result on the page, but at the statement point I got null from the .getText () method.

Here is my code:

public class CalculatorExampleTest {
static WebDriver driver;
private static String url = "http://www.anaesthetist.com/mnm/javascript/calc.htm";

//Setup Driver
@BeforeClass
public static void setupTest() {
    driver = new FirefoxDriver();
    driver.navigate().to(url);
    driver.manage().window().maximize();
}

@Test
public void calculatorJavaScriptTest() {
    //Declare a Webdriver Wait
    WebDriverWait wait = new WebDriverWait(driver, 10);

    //1-) Click "9"
    driver.findElement(By.cssSelector("input[type='button'][onclick='AddDigit(\\'9\\')']")).click();

    //2-) Click "+"
    driver.findElement(By.cssSelector("input[type='button'][onclick='Operate(\\'+\\')']")).click();

    //3-) Click "3"
    driver.findElement(By.cssSelector("input[type='button'][onclick='AddDigit(\\'3\\')']")).click();

    //4-) Declare JavaScriptExecutor and call "Calculate()" function
    JavascriptExecutor js =(JavascriptExecutor)driver;
    js.executeScript("Calculate();");

    //driver.findElement(By.cssSelector("input[type='button'][onclick='Calculate()']")).click();

    //5-) Check result is 12?
    //Wrapped Anonymous Class (Synchronization)
    wait.until(textDisplayed(By.cssSelector("input[name='Display']:nth-child(1)"),"12"));

    WebElement result = driver.findElement(By.cssSelector("input[name='Display']:nth-child(1)"));
    assertThat(result.getText(), is("12"));

}

//Wrapped Anonymous Class
private ExpectedCondition<Boolean> textDisplayed (final By elementFindBy, final String text){
    return new ExpectedCondition<Boolean>() {
        @Override
        public Boolean apply(WebDriver webDriver) {
            return webDriver.findElement(elementFindBy).getText().contains(text);
        }
    };
}

//Close Driver
@AfterClass
public static void quitDriver() {
    driver.quit();
}

}

+4
source share
1 answer

Since this is an element input, you need to get the attribute value valueinstead of text:

WebElement result = driver.findElement(By.cssSelector("input[name=Display]"));
assertThat(result.getAttribute("value"), is("12"));
+1
source

Source: https://habr.com/ru/post/1625234/


All Articles