assertEquals在selenium中工作,但在JAVA中不工作
我用selenium制作了一个测试用例,它可以完美地重复,然后将其导出到JAVA/JUnit4/Webdriver:assertEquals在selenium中工作,但在JAVA中不工作,java,unit-testing,selenium,selenium-webdriver,Java,Unit Testing,Selenium,Selenium Webdriver,我用selenium制作了一个测试用例,它可以完美地重复,然后将其导出到JAVA/JUnit4/Webdriver: public void emailInvalid() throws Exception { driver.get(baseUrl + "/test/contacts.html"); driver.findElement(By.name("companyName")).clear(); driver.findElement(By.name("companyN
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());
}
Java中的测试失败,因为assertEquals无法获取它要查找的文本。错误消息是
org.junit.ComparisonFailure:应为:但为:
尝试检查baseUrl的值。它等于“”还是仅仅是“.”等等?尝试调试此方法可能是因为Java未找到正确的url。或者使用logging和logging baseUrl+“/test/contacts.html”。baseUrl似乎有问题。显然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()返回的内容。在大多数情况下,您的问题是同步错误。 已找到元素,但其文本为空。
您可以尝试使用webDriverWait并预期其过时性,您可以通过在定位器中使用元素的预期文本来更改元素的定位方式,或者您可以添加非常短的睡眠时间尝试等待文本出现,如果文本位于指定的时间间隔内,则使用断言。 还要确保使用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;
}
实际上,您也可以在该行之后执行get text操作:
wait.until(ExpectedConditions.visibilityOfElementLocated(By.cssSelector("span.error.notValidEmail")));
System.out.println(driver.findElement(By.cssSelector("span.error.notValidEmail")).getText());
看看你是否得到了你想要的文本。在这种情况下,您可能不需要使用方法
waitForTextPresent
。检查是否只存在一个与该选择器相关的元素,并且该元素在出现后立即具有预期的文本,并且文本不会在以后生成。此外,请确保此文本确实位于此元素中,而不是位于任何子元素中element@Gadget它在元素中,我认为这是因为selenium在单击submit时使用clickandWait,但在JAVA中它只是单击,加载速度不够快,所以assertEqual为空!我尝试了下面的mike88代码,但它只是超时了。我想你的意思是,它可以与Selenium IDE一起工作,但一旦你将它移植到Selenium WebDriver/Java,它就不能工作了。您可能希望在问题中澄清这些细节。您应该花一些时间调查.getText()
返回“
的原因。您可能需要添加一个WebDriverWait
。请提供html代码。。。。其中显示“无效电子邮件”文本。如果未找到元素,将引发ElementNotFoundException