Четыре идентичных теста Selenium дают другой результат - PullRequest
0 голосов
/ 11 февраля 2020

У меня есть тестовый класс с четырьмя одинаковыми тестами (из-за этой ошибки). Я не понимаю, почему три из них проходят хорошо, а один выдает мне ошибку. Может кто-нибудь сказать мне, где проблема? Вот код класса:

package tests;

import Pages.SinCityPage;
import Pages.SpartaPage;
import model.Sin;
import model.SinTagsEnum;
import org.junit.Before;
import org.junit.Test;

import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

public class PageFactoryExampleTest extends Base
{
    protected String siteUrl = "/sincity.php";
    protected String spartaSiteUrl = "/sparta.php";

    protected SinCityPage sinCityPage;

    protected SpartaPage spartaPage;


    @Before
    public void setUp() throws IOException {
        driver.get(baseUrl + siteUrl);
        this.sinCityPage = new SinCityPage(driver);
        this.spartaPage = new SpartaPage(driver);
    }


    @Test
    public void test1() throws InterruptedException {
        Sin sin = this.createSin();
        sinCityPage.openSinDetail(sin);
        sinCityPage.fillForm(sin);
        sinCityPage.openSinDetail(sin);
        sinCityPage.checkSinDetail(sin);

        driver.get(baseUrl + spartaSiteUrl);
        spartaPage.checkSins();
        spartaPage.checkForgive();
    }


    @Test
    public void test2() throws InterruptedException {
        Sin sin = this.createSin();
        sinCityPage.openSinDetail(sin);
        sinCityPage.fillForm(sin);
        sinCityPage.openSinDetail(sin);
        sinCityPage.checkSinDetail(sin);

        driver.get(baseUrl + spartaSiteUrl);
        spartaPage.checkSins();
        spartaPage.checkForgive();
    }


    @Test
    public void test3() throws InterruptedException {
        Sin sin = this.createSin();
        sinCityPage.openSinDetail(sin);
        sinCityPage.fillForm(sin);
        sinCityPage.openSinDetail(sin);
        sinCityPage.checkSinDetail(sin);

        driver.get(baseUrl + spartaSiteUrl);
        spartaPage.checkSins();
        spartaPage.checkForgive();
    }


    @Test
    public void test4() throws InterruptedException {
        Sin sin = this.createSin();
        sinCityPage.openSinDetail(sin);
        sinCityPage.fillForm(sin);
        sinCityPage.openSinDetail(sin);
        sinCityPage.checkSinDetail(sin);

        driver.get(baseUrl + spartaSiteUrl);
        spartaPage.checkSins();
        spartaPage.checkForgive();
    }


    private Sin createSin() {
        List<SinTagsEnum> tags = new ArrayList<SinTagsEnum>();
        tags.add(SinTagsEnum.BLACK_MAIL);
        tags.add(SinTagsEnum.HIJACK);

        return new Sin("Vrazda", "Ja", "Vrazda spojena s lupeznzm prepadnutim muchy v zapadnutej ulicke", tags);
    }
}

Вот Базовый класс

package tests;

import org.junit.After;
import org.junit.Before;
import org.openqa.selenium.WebDriver;
import services.WebDriverService;

import java.io.IOException;

public class Base
{
    protected WebDriver driver;

    protected String baseUrl = "http://seleniumweb2";

    @Before
    public void baseBefore() throws IOException {
        this.driver = (new WebDriverService()).getDriver();
        //this.driver = (new WebDriverService()).getDriver(WebDriverService.GECKO_EXE);
    }


    @After  // It can not be AfterClass because of closing browsers on remote server
    public void baseAfter()
    {
        try {
            //driver.close(); // Closes current active window with focus on. Other windows opened bz driver remain open.
            driver.quit();  // Closes all opened windows by this driver.
        } catch ( Exception e ) {
            System.out.println("Base::baseAfter() throws exception: " + e.getMessage());
        }
    }

}

Вот класс драйвера

package services;

import model.BrowsersEnum;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.chrome.ChromeOptions;
import org.openqa.selenium.firefox.FirefoxDriver;
import org.openqa.selenium.firefox.FirefoxOptions;
import org.openqa.selenium.phantomjs.PhantomJSDriver;
import org.openqa.selenium.remote.RemoteWebDriver;

import java.net.MalformedURLException;
import java.net.URL;


public class WebDriverService
{

    public static String CHROME_EXE = "chromedriver.exe";
    public static String PHANTOM_EXE = "phantomjs.exe";
    public static String GECKO_EXE = "geckodriver.exe";
    public static String HUB_URL = "http://127.0.0.1:4444/wd/hub";

    private WebDriver driver = null;


    /**
     * This returns singleton driver
     * @return
     * @throws MalformedURLException
     */
    public WebDriver getDriver() throws MalformedURLException {
        String browser = System.getProperty("browser").toLowerCase();

        if (browser.equals(BrowsersEnum.CHROME.getValue())) {
            this.driver = new RemoteWebDriver(this.getRemoteUrl(), new ChromeOptions());
        } else if (browser.equals(BrowsersEnum.FIREFOX.getValue())) {
            this.driver = new RemoteWebDriver(this.getRemoteUrl(), new FirefoxOptions());
        } else {
            throw new IllegalArgumentException("Base::getDriver() invalid argument: " + browser);
        }

        return this.driver;
    }

    /**
     * Avoid using Selenium server GRID
     * @param which
     * @return
     */
    public WebDriver getDriver(String which) {
        if (which == PHANTOM_EXE) {
            System.setProperty("phantomjs.binary.path", PHANTOM_EXE);
            this.driver = new PhantomJSDriver();
        } else if (which == CHROME_EXE) {
            System.setProperty("webdriver.chrome.driver", CHROME_EXE);
            this.driver = new ChromeDriver();
        } else if (which == GECKO_EXE) {
            System.setProperty("webdriver.chrome.driver", GECKO_EXE);
            this.driver = new FirefoxDriver();
        }

        return this.driver;
    }

    /**
     * Remote selenium server (nodes) needs to have new instance for every test (not singleton).
     * Otherwise on the driver.quit() lose the session.
     * @return
     * @throws MalformedURLException
     */
    public URL getRemoteUrl() throws MalformedURLException {
        URL url = new URL( HUB_URL );
        return url;
    }
}

А вот скриншот Журнал ошибок Дженкинса

enter image description here

Это сводит меня с ума. Я действительно не знаю, что происходит.

1 Ответ

0 голосов
/ 14 февраля 2020

Исправлена ​​проблема с настройками плагина maven surefire для параллельного тестирования. Это решение:

<configuration>
    <forkCount>8</forkCount>
    <reuseForks>false</reuseForks>
</configuration>

До того, как было

<configuration>
     <parallel>methods</parallel>
     <threadCount>10</threadCount>
</configuration>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...