Selenium JavascriptExecutor Calculation
问题描述:
我试着在JavaScriptExecutor上做一个例子。Selenium JavascriptExecutor Calculation
测试网站是:http://www.anaesthetist.com/mnm/javascript/calc.htm
测试场景为:3 + 9 = 12(加)
我写了下面的代码,但没有奏效。我调试代码,我在页面上看到了12个结果,但在断言点处,我从.getText()方法获得了空值。
这里是我的代码:
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();
}
}
答
由于这是input
元素,你需要得到value
属性值,而不是文本:
WebElement result = driver.findElement(By.cssSelector("input[name=Display]"));
assertThat(result.getAttribute("value"), is("12"));
感谢。问题解决了。我也与Selenium IDE进行了交叉检查。它生成的代码也使用getAttribute代替getText() –
我做了什么写在那个链接。感谢@alecxe –