Тест выполняется дважды и не закрывается - PullRequest
0 голосов
/ 19 февраля 2019

У меня есть сценарий автоматизации Java, запускаемый в Selenium, по какой-то причине он, кажется, инициализирован дважды.Первый сценарий проходит, но не закрывается, это вызывает второй запуск того же сценария, который также проходит, но закрывается.

Это происходит на всех сценариях, которые я запускаю, и, таким образом, вызывает загрузку окна дляоткрытый и не закрытый (очень грязный)

Я создал метод разрыва, который можно увидеть ниже.Это часть моего класса настройки Selenium

package support;

import org.junit.After;
import org.junit.AfterClass;
import org.junit.BeforeClass;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;


public class SeleniumSetup {

    protected WebDriver driver;

    public SeleniumSetup(WebDriver driver)
    {

    }

    public SeleniumSetup() {

    }

    public void prepareBrowserForSelenium() {

//      setup();
        if(DriverSingleton.getDriver() == null)
        {
            setup();    
        }
        else
        {
            driver = DriverSingleton.getDriver();
        }

    }

    public void setup() {
        System.setProperty("webdriver.chrome.driver", "C:\\Users\\Selenium and drivers\\chromedriver.exe");
        driver = new ChromeDriver();
        driver.get("http://the-internet.herokuapp.com/");
        driver.manage().window().maximize();

    }


    public void tearDown() {
        driver.close();
    }

}

Вот мой код для BasePage

package pages;

import org.openqa.selenium.WebDriver;

public class BasePage {

    protected WebDriver driver;

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

}

Вот класс, который я использую для запуска своих скриптов:

package support;

import org.junit.runner.RunWith;
import cucumber.api.CucumberOptions;
import cucumber.api.junit.Cucumber;

@RunWith(Cucumber.class)
@CucumberOptions(
//      features = "src/test/java/features/ABTestingPage.feature"
//      features = "src/test/java/features/Checkboxes.feature"
//      features = "src/test/java/features/Dropdown.feature"
//      features = "src/test/java/features/AutomationLandingPage.feature"
        features = "src/test/java/features/ChallengingDOM.feature"

//      features = "src/test/java/@ABTestingPage"


        ,glue={"steps"}
        )

public class TestRunner {

}

Вот мои Шаги, которые включают в себя мой класс SeleniumSetup

package steps;

import cucumber.api.java.en.Given;
import cucumber.api.java.en.Then;
import cucumber.api.java.en.When;
import pages.ChallengingDOMPage;
import pages.DropdownPage;
import support.SeleniumSetup;

public class ChallengingDOMSteps extends SeleniumSetup{

    public ChallengingDOMSteps()throws Exception{
        prepareBrowserForSelenium();    
    }

    @Given("^I am on the landing page$")
    public void i_am_on_the_landing_page() throws Throwable {
        new ChallengingDOMPage(driver).landingPage();
    }

    @When("^I select \"(.*?)\"$")
    public void i_select(String arg1) throws Throwable {
        new ChallengingDOMPage(driver).selectChallengingDOM();  
    }

    @Then("^I will be navigated to the \"(.*?)\" page$")
    public void i_will_be_navigated_to_the_page(String arg1) throws Throwable {
        if(arg1.equalsIgnoreCase("Challenging DOM"))
        new  ChallengingDOMPage(driver).verifyChallegingDOMPage();

        else if(arg1.equals("Dropdown"))
         new DropdownPage(driver).verifyDropdownHeading();
     }
}

Я думаю, мой код для шага в порядке.

package pages;

import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;

import junit.framework.Assert;

public class ChallengingDOMPage extends BasePage {

    public ChallengingDOMPage(WebDriver driver) {
        super(driver);
    }

        By landingPageCopy = By.className("heading");


    public void landingPage() {

        driver.findElement(landingPageCopy).getText();

        System.out.println("verified copy on landing page on DOM test");

    }

    public void selectChallengingDOM() {

        driver.findElement(By.linkText("Challenging DOM")).click();

        System.out.println("DOM URL clicked");

    }

    public void verifyChallegingDOMPage() {

        Assert.assertTrue(driver.findElement(By.xpath("//*[contains(text(), 'The hardest part')]")).isDisplayed());
        System.out.println("Copy Verified on the DOM page");

    }

}

Это вывод консоли

WARNING: An illegal reflective access operation has occurred
WARNING: Illegal reflective access by cucumber.deps.com.thoughtworks.xstream.converters.collections.TreeMapConverter (file:/C:/Users/awalker/.m2/repository/info/cukes/cucumber-jvm-deps/1.0.3/cucumber-jvm-deps-1.0.3.jar) to field java.util.TreeMap.comparator
WARNING: Please consider reporting this to the maintainers of cucumber.deps.com.thoughtworks.xstream.converters.collections.TreeMapConverter
WARNING: Use --illegal-access=warn to enable warnings of further illegal reflective access operations
WARNING: All illegal access operations will be denied in a future release
Starting ChromeDriver 2.44.609538 (b655c5a60b0b544917107a59d4153d4bf78e1b90) on port 43775
Only local connections are allowed.
verified copy on landing page on DOM test
DOM URL clicked
Copy Verified on the DOM page
Starting ChromeDriver 2.44.609538 (b655c5a60b0b544917107a59d4153d4bf78e1b90) on port 34425
Only local connections are allowed.

1 Scenarios ([32m1 passed[0m)
4 Steps ([32m4 passed[0m)
0m11.433s

Я должен попасть на эту страницу http://the -internet.herokuapp.com / , перейти к http://the -internet.herokuapp.com / challengeing_dom и проверить копию

Ответы [ 2 ]

0 голосов
/ 20 февраля 2019

Вы не показали, как выглядит ваш файл объектов.В вашем выводе похоже, что вы выполнили 4 шага, но вы показали нам только 3 определения шагов.Я попробовал вашу настройку, как вы описали, и использовал простой файл функций, в котором только один сценарий выполняет все три шага в том же порядке, в котором они определены, и он работает без проблем с выводом

Starting ChromeDriver 2.44.609538 (b655c5a60b0b544917107a59d4153d4bf78e1b90) 
on port 43775
Only local connections are allowed.
verified copy on landing page on DOM test
DOM URL clicked
Copy Verified on the DOM page

Этото же самое, что и ваш вывод, но вы показываете дополнительную инстанцию ​​ChromeDriver после .Посмотрите, какие шаги на самом деле выполняются: у вас должен быть дополнительный шаг, который выполняется после трех других и запускает другой веб-драйвер.

Обратите также внимание, что ваш метод tearDown() никогда не запускается.Вы должны сказать огурцу запустить его после завершения сценария.Вы можете сделать это, добавив

@After
public void tearDown() {
    super.tearDown();
}

в свой ChallengingDOMSteps, обратите внимание, что это должно быть import cucumber.api.java.After;, а не import org.junit.After;, чтобы Cucumber его поднял.

0 голосов
/ 19 февраля 2019
Хромированный драйвер

в отличие от других драйверов должен быть закрыт следующим образом:

driver.close();
driver.quit();

вместо

driver.close();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...