Нужна помощь с testng / arquillian / drone / graphene и обходом arquillian.xml - PullRequest
0 голосов
/ 08 мая 2018

Позвольте мне настроить мою тестовую среду. Мы запускаем наши тесты на виртуальных машинах из командной строки. Запуск testng.xml из командной строки. Не могу передать параметры через это. У нас есть test.properties со всеми нашими параметрами времени выполнения, и с его помощью мы устанавливаем тип браузера, версию, URL-адрес домашней страницы и т. Д. В настоящее время мы используем объекты страниц.

У нас есть файл functionsTest.java, который наследуется всеми PageTests, который анализирует свойства test.properties и устанавливает все параметры для этого конкретного запуска 600 тестов. Я хотел бы перейти на использование Arquillian / Graphene / Drone, но я пытаюсь настроить его в своей среде.

Я не могу использовать arquillian.xml, поскольку каждый прогон будет отличаться, и у меня нет способа прикрепить отдельный файл для каждого прогона. Таким образом, мне нужно, я считаю, установить системные свойства в моем functionsTest.java для всего. Я пытался до сих пор с:

// Файл: FunctionalTest.java пакетные испытания;

import org.jboss.arquillian.drone.api.annotation.Drone;
import org.jboss.arquillian.testng.Arquillian;
import org.openqa.selenium.WebDriver;
import org.testng.annotations.BeforeSuite;

import framework.Log;
import framework.Utility;

/**
 * FunctionalTest class contains the setup methods and these will run before or after the suite or test methods.
 *
 **/
public class FunctionalTest extends Arquillian
{
    @Drone
    public WebDriver wDriver;

    public static Properties pTestProperties = new Properties();
    public static String sBrowser = "";
    public static String sBrowserVersion = "";
    public static String sEnvironment = "";

    @BeforeSuite
    public static void StartSuite()
    {
        pTestProperties = Utility.ReadPropertiesFile("test.properties", pTestProperties);
        pTestProperties = Utility.ReadPropertiesFile("testEnvironment.properties", pTestProperties);
        sEnvironment = (System.getenv("ENVIRONMENT_NAME") != null) ? System.getenv("ENVIRONMENT_NAME") : pTestProperties.getProperty("environment");
        sBrowser = (Utility.GetTestParameterString("browser") != "") ? Utility.GetTestParameterString("browser") : pTestProperties.getProperty("browser");
        sBrowserVersion = (Utility.GetTestParameterString("browserVersion") != "") ? Utility.GetTestParameterString("browserVersion") : pTestProperties.getProperty("browserVersion");
        System.setProperty("webdriver.browser", sBrowser);
        System.setProperty("webdriver.chrome.driver", "\\drivers\\chromedriver_2.38_Win32.exe");
    }
}

// Файл: HomePageTest.java пакетные испытания;

import org.jboss.arquillian.container.test.api.RunAsClient;
import org.jboss.arquillian.testng.Arquillian;
import org.testng.Assert;
import org.testng.annotations.Test;

import framework.Log;
import pageobjects.HomePage;

@RunAsClient
public class HomePageTest extends FunctionalTest
{
    @Test(dataProvider = Arquillian.ARQUILLIAN_DATA_PROVIDER)
    public void OpenUrlTest()
    {
        String sUrl = "";
        HomePage oHomePage = null;
        sUrl = pTestProperties.getProperty("testUrl." + sEnvironment + "." + sTestCaseName) != null ? pTestProperties.getProperty("testUrl." + sEnvironment + "." + sTestCaseName) : pTestProperties.getProperty("testUrl." + sEnvironment + "." + sCountry);
        System.setProperty("webdriver.remoteAddress", sUrl);
        oHomePage = new HomePage(wDriver);
        wDriver.get(sUrl);
        Assert.assertTrue(oHomePage.IsLoaded());
        Log.Info("Passed");
    }

}

// Файл: HomePage.java пакет объектов страницы;

import java.util.concurrent.TimeUnit;

import org.jboss.arquillian.graphene.Graphene;
import org.openqa.selenium.StaleElementReferenceException;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.support.FindBy;

import framework.Log;

public class HomePage
{
    private final WebDriver driver;

    public HomePage(WebDriver driver)
    {
        this.driver = driver;
    }

    @FindBy(id = "hero-carousel")
    private WebElement homepageCarousel;

    public boolean IsLoaded()
    {
        Log.Info("Entering method HomePage::IsLoaded()");
        boolean bFlag = false;
        try
        {
            Graphene.waitGui().withMessage("Carousel not shown on HomePage").ignoring(StaleElementReferenceException.class)
                    .pollingEvery(1, TimeUnit.SECONDS).until().element(homepageCarousel).is().visible();
            bFlag = true;
        }
        catch (Exception e)
        {
            Log.Info("Execption thrown: " + e.getMessage());
            bFlag = false;
        }
        Log.Info("Exiting the method HomePage::IsLoaded() with return value: '" + bFlag + "'");
        return bFlag;
    }
}

Запуск OpenUrlTest приводит к ошибке «отсутствует arquillian.xml». Если я добавлю arquillian.xml, то ничего, что я сделаю, не переопределит тип браузера. Любая помощь?

Грег

1 Ответ

0 голосов
/ 11 мая 2018

Вы можете использовать Системные свойства в arquillian.xml.

Например:

<extension qualifier="webdriver">
    <property name="browser">${browser}</property>
</extension>

Через командную строку вы можете передать -Dbrowser=chrome

Или,

Вы можете игнорировать свойство arquillian xml и установить свойство arquillian во время выполнения

System.setProperty("arq.extension.webdriver.browser", "chrome");
...