2015-12-04 21 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

相关问题