2016-01-20 81 views
4

我試着在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(); 
} 

}

回答

1

由於這是input元素,你需要得到value屬性值,而不是文本:

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

感謝。問題解決了。我也與Selenium IDE進行了交叉檢查。它生成的代碼也使用getAttribute代替getText() –

+0

我做了什麼寫在那個鏈接。感謝@alecxe –

相關問題