2015-12-04 23 views
2

我在硒其中重複做完美的測試用例,然後將其出口到JAVA/JUnit4/webdriver的:在Java中的assertEquals工作在硒但不是在JAVA

public void emailInvalid() throws Exception { 
    driver.get(baseUrl + "/test/contacts.html"); 
    driver.findElement(By.name("companyName")).clear(); 
    driver.findElement(By.name("companyName")).sendKeys("testcomp"); 
    driver.findElement(By.name("phone")).clear(); 
    driver.findElement(By.name("phone")).sendKeys("45454545"); 
    driver.findElement(By.name("email")).clear(); 
    driver.findElement(By.name("email")).sendKeys("test.ee"); 
    driver.findElement(By.name("message")).clear(); 
    driver.findElement(By.name("message")).sendKeys("qwerty"); 
    driver.findElement(By.cssSelector("button.submit")).click(); 
    assertEquals("Not valid email.", driver.findElement(By.cssSelector("span.error.notValidEmail")).getText()); 
} 

測試失敗,因爲的assertEquals不能得到的它尋找的文本。該錯誤消息是

org.junit.ComparisonFailure:預期:< [不是有效的電子郵件]>卻被:< []>

+0

檢查只涉及到這樣一個選擇的元素存在,它已預期的文本瞬間,因爲它出現了,是不是以後生成的文本。此外,確保該文確實位於此元素,而不是在任何子元素 – Gadget

+0

@Gadget它的元素,我想這是因爲硒點擊提交時使用clickandWait但在Java它只需點擊和它不加載足夠快assertEqual變空了!我嘗試了下面的mike88代碼,但它只是超時。 –

+0

我認爲你的意思是它可以與Selenium IDE一起工作,但是一旦你將它移植到Selenium WebDriver/Java後就不起作用。你可能想澄清你的問題中的這些細節。 – JeffC

回答

0

嘗試查看的baseUrl什麼價值。它是否等於「http://yousite」或只是「..」等?嘗試調試這個方法可能是Java沒有找到正確的url。或者使用日誌記錄和日誌記錄baseUrl +「/test/contacts.html」。它看起來像baseUrl的問題。

+0

的baseUrl是正確的。 –

1

顯然,元件不能被CSS選擇發現,從而斷言失敗。

也許件執行斷言之後或加載的元素完全不加載。

嘗試等待元素使用下面的代碼斷言之前加載:

WebDriverWait wait = new WebDriverWait(driver, 10); 
wait.until(ExpectedConditions.elementToBeClickable(By.cssSelector("span.error.notValidEmail"))); 
assertEquals("Not valid email.", driver.findElement(By.cssSelector("span.error.notValidEmail")).getText()); 

如果不是再檢查一遍,如果選擇是正確的情況下。 還通過打印實際的字符串來檢查getText()返回的內容。

+1

如果找不到IF元素,則拋出ElementNotFoundException – Piotroslav

1

在大多數情況下,您的問題將是壞同步。 找到您的元素,但其文本爲空。 您可以嘗試使用webDriverWait以期待過時,您可以通過在定位器中使用其預期文本來更改元素的位置,或者可以添加非常短的睡眠

1

嘗試等待文本呈現並使用斷言if該文本位於指定的時間間隔內。 另外請務必使用您的css定位器檢查元素的唯一性。

public void emailInvalid() throws Exception { 
    driver.get(baseUrl + "/test/contacts.html"); 
    driver.findElement(By.name("companyName")).clear(); 
    driver.findElement(By.name("companyName")).sendKeys("testcomp"); 
    driver.findElement(By.name("phone")).clear(); 
    driver.findElement(By.name("phone")).sendKeys("45454545"); 
    driver.findElement(By.name("email")).clear(); 
    driver.findElement(By.name("email")).sendKeys("test.ee"); 
    driver.findElement(By.name("message")).clear(); 
    driver.findElement(By.name("message")).sendKeys("qwerty"); 
    driver.findElement(By.cssSelector("button.submit")).click(); 
    WebDriverWait wait = new WebDriverWait(driver, 10); 
    wait.until(ExpectedConditions.visibilityOfElementLocated(By.cssSelector("span.error.notValidEmail"))); 
    assertTrue(waitForTextPresent(driver, By.cssSelector("span.error.notValidEmail"), "Not valid email.", 20)); 
} 

public static boolean waitForTextPresent(WebDriver driver, By locator, String text, int timeOut) { 
    int i = 0; 
    int WAIT_SLEEP_INTERVAL = 500; 
    boolean isTextPresent = false; 
    while (!isTextPresent) { 
     i = i + 1; 
     try{ 
      Thread.sleep(WAIT_SLEEP_INTERVAL); 
     } catch(Exception e) { 
      //do nothing 
     } 
     isTextPresent = driver.findElement(locator).getText().contains(text); 
     if (i * WAIT_SLEEP_INTERVAL >= timeOut) { 
      return false; 
     } 
    } 
    return true; 
} 

其實你也可以做一個獲取文本行後:

wait.until(ExpectedConditions.visibilityOfElementLocated(By.cssSelector("span.error.notValidEmail"))); 
System.out.println(driver.findElement(By.cssSelector("span.error.notValidEmail")).getText()); 

看看是否你得到你所尋找的文本。在這種情況下,您可能不需要使用方法waitForTextPresent

相關問題