Selenium + JUnit,正确页面的断言错误

时间:2019-01-27 11:01:43

标签: java selenium-webdriver junit

我已经使用Selenium WD和JUnit编写了一个代码,该代码应检查是否已加载正确的页面并且该页面的表不为空

除了断言之外,为了确保加载正确的页面(检查URL是否包含指定的文本),我还在“ waitUntilPageLoaded”方法中添加了“ if-else”语句。

import junit.framework.TestCase;
import org.openqa.selenium.By;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.firefox.FirefoxDriver;
import org.junit.*;
import org.openqa.selenium.support.ui.ExpectedConditions;
import org.openqa.selenium.support.ui.WebDriverWait;

public class GuruSearch
{
    @Test
    static void checkDemoLogin()
 {
    System.setProperty("webdriver.gecko.driver", "C:\\Users\\pansa\\Documents\\Webdrivers\\geckodriver.exe");
    FirefoxDriver driver =  new FirefoxDriver();
    driver.get("https://demo.guru99.com/");
    TestCase.assertFalse(driver.getPageSource().contains("404"));
    driver.manage().window().maximize();
    //odczekaj(5000);
    WebElement browser  = driver.findElement(By.name("emailid"));
    browser.sendKeys("Test@test.com");
    browser.submit();
    waitUntilPageLoaded(driver,"access.php", 10);
    TestCase.assertTrue(driver.getPageSource().contains("Access details to demo site"));
    WebElement table = driver.findElement(By.tagName("tbody"));
    TestCase.assertNotNull(table);
    driver.close();

}

static private void odczekaj(int czas)
{
    try {
        Thread.sleep(czas);
    } catch (InterruptedException e) {
        e.printStackTrace();
        System.out.println("Przerwanie");
    }
}

private static void waitUntilPageLoaded(FirefoxDriver d, String zawiera, int timeout)
{
    WebDriverWait wait = new WebDriverWait(d, timeout);
    wait.until(ExpectedConditions.urlContains(zawiera));

if (d.getCurrentUrl().contains(zawiera))
    {
    System.out.println("OK");
    }
else
    {
    System.out.println("NOK");
    }
}
}

“ waitUntilPageLoaded”方法中的“ if-else”语句返回“ OK”,但TestCase.assertTrue(driver.getPageSource()。contains(“访问演示站点的详细信息”)) 尽管文本出现在页面中,但会引发AssertionError。 为什么会引发AssertionError?

1 个答案:

答案 0 :(得分:0)

在使用JUnit注释时,带注释的方法不应是静态的。我对您的代码做了一些修改,请尝试以下操作:

import org.junit.Test;
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.support.ui.ExpectedConditions;
import org.openqa.selenium.support.ui.WebDriverWait;

import junit.framework.TestCase;

public class GuruSearch
{
    @Test
    public void checkDemoLogin()
    {
        System.setProperty("webdriver.chrome.driver", "C:\\NotBackedUp\\chromedriver.exe");
        WebDriver driver =  new ChromeDriver();
        driver.get("https://demo.guru99.com/");
        TestCase.assertFalse(driver.getPageSource().contains("404"));
        driver.manage().window().maximize();
        //odczekaj(5000);
        WebElement browser  = driver.findElement(By.name("emailid"));
        browser.sendKeys("Test@test.com");
        browser.submit();
        waitUntilPageLoaded(driver,"access.php", 30);
        TestCase.assertTrue(driver.getPageSource().contains("Access details to demo site"));
        WebElement table = driver.findElement(By.tagName("tbody"));
        TestCase.assertNotNull(table);
        driver.close();
    }

    static private void odczekaj(int czas)
    {
        try {
            Thread.sleep(czas);
        } catch (InterruptedException e) {
            e.printStackTrace();
            System.out.println("Przerwanie");
        }
    }

    private static void waitUntilPageLoaded(WebDriver d, String zawiera, int timeout)
    {
        WebDriverWait wait = new WebDriverWait(d, timeout);
        wait.until(ExpectedConditions.urlContains(zawiera));

        if (d.getCurrentUrl().contains(zawiera))
        {
            System.out.println("OK");
        }
        else
        {
            System.out.println("NOK");
        }
    }
}

上面的代码正在打印'OK',并且Assert条件也通过了。而且我认为,是否在容器中输入大写/小写都没有关系。它将匹配两种情况。

我的系统中没有Firefox,因此我已经使用Chrome进行了检查,请更改浏览器,然后尝试...希望对您有所帮助...