Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/397.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
assertEquals在selenium中工作,但在JAVA中不工作_Java_Unit Testing_Selenium_Selenium Webdriver - Fatal编程技术网

assertEquals在selenium中工作,但在JAVA中不工作

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

我用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("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