Как обработать файл определения нескольких шагов в Cucumber с Selenium - PullRequest
1 голос
/ 12 апреля 2019

У меня есть два файла определения шага, и в будущем их будет несколько, я не могу выполнить свой код для выхода из системы, он нормально работает для входа в систему и один файл определения шага, и он постоянно открывает браузер Chrome.

Я создал фреймворк, используя фабрику страниц, ниже мой код:

Страница входа:

public class LoginPage {

    WebDriver driver;

    public LoginPage(WebDriver driver) {
        //this.driver=driver;
        PageFactory.initElements(driver, this);

    }

    @FindBy(how=How.ID,using="username")
    public WebElement usernametexbox;

    @FindBy(how=How.ID,using="pass")
    public WebElement passwordtextbox;

    @FindBy(how=How.ID,using="submit")
    public WebElement signin;

    @FindBy(how=How.XPATH,using="//button[@class='btn']")
    public WebElement acceptbutton;

   public void enter_username(String username) {

    usernametexbox.clear();
    usernametexbox.sendKeys(username);
    usernametexbox.getText();
    }

    public void enter_password(String password) {

        passwordtextbox.clear();
        passwordtextbox.sendKeys(password);
    }

    public void clickToSigninbutton() {
        signin.click();
    }

    public void clickToAcceptbutton() {


    acceptbutton.click();

    }

public void fill_LoginDetails() {

    enter_username("abc");
    enter_password("def45");

  }

}

Страница выхода из системы:

public class LogoutPage {

    WebDriver driver;

    public LogoutPage(WebDriver driver) {
        //this.driver=driver;
        PageFactory.initElements(driver, this);

    }

    @FindBy(how=How.XPATH,using="//*[@class='icon']")
    public WebElement chevron;

    @FindBy(how=How.XPATH,using="//a[@class='logout-link']")
    public WebElement logoutlink;

    public void clickTochevron() {
        chevron.click();
    }

    public void clickToLogoutLink() {


        link.click();
    }
}

Считыватель файлов свойств:

public class PropertiesFileReader {

    public Properties getproperty() throws IOException {
    FileInputStream inputstream=null;
    Properties properties=new Properties();
    try {
        properties.load(new FileInputStream("resources/config.properties"));
    }catch(Exception e) {
        System.out.println("Exception " +e);
    }

        return properties;
    }
}

Утилита браузера:

public class BrowserUtility {

    public static WebDriver openBrowser(WebDriver driver, String browserName, String url) throws InterruptedException {

        if(browserName.equals("chrome")) {

            System.setProperty("webdriver.chrome.driver", "D:\\chromedriver\\chromedriver.exe");
            driver=new ChromeDriver();
            driver.manage().window().maximize();
            driver.get(url);
            driver.manage().timeouts().implicitlyWait(50, TimeUnit.SECONDS);
            return driver;

        }else if(browserName.equals("IE")) {
        System.setProperty("webdriver.chrome.driver", "D:\\chromedriver\\chromedriver.exe");
        driver=new ChromeDriver();
        driver.manage().window().maximize();
        driver.get(url);
        Thread.sleep(5000); 
        return driver;
    }else if(browserName.equals("Firefox")) {
        System.setProperty("webdriver.chrome.driver", "D:\\chromedriver\\chromedriver.exe");
        driver=new ChromeDriver();
        driver.manage().window().maximize();
        driver.get(url);
        Thread.sleep(5000); 
        return driver;
    }
        return driver;

}
}

Логин Stepdef:

public class StepDefinition {

    public static WebDriver driver;

//  public LoginPage loginpage;

//  Properties properties=new Properties();
    PropertiesFileReader obj=new PropertiesFileReader();

    @Given("^Open browser and enter url$")
    public void open_browser_and_enter_url() throws Throwable {

    Properties properties=obj.getproperty();
    driver= BrowserUtility.openBrowser(driver, properties.getProperty("browser.Name"), properties.getProperty("URL"));

    }

    @Then("^Enter username and password$")
    public void enter_username_and_password() throws Throwable {

    LoginPage loginpage=new LoginPage(driver);
    loginpage.fill_LoginDetails();  
            }

    @Then("^click on sign in button$")
    public void click_on_sign_in_button() throws Throwable {

        new LoginPage(driver).clickToSigninbutton();
        System.out.println("Sign-In successfully");

    }

    @Then("^Terms and conditions page open and click on Accept button$")
    public void terms_and_conditions_page_open_and_click_on_Accept_button() throws Throwable {


        new LoginPage(driver).clickToAcceptbutton();
    }

}

Выход из системы stepdef:

public class Logoutstepdef {

    public static WebDriver driver;
    PropertiesFileReader obj=new PropertiesFileReader();

    @Given("^Chevron near username$")
    public void chevron_near_username() throws Throwable {

        Properties properties=obj.getproperty();
        driver= BrowserUtility.openBrowser(driver, 
 properties.getProperty("browser.Name"), properties.getProperty("URL"));

        LogoutPage logoutpage=new LogoutPage(driver);
        logoutpage.clickTochevron();
    }

    @Then("^click on chevron and it should get expands$")
    public void click_on_chevron_and_it_should_get_expands() throws 
 Throwable {

        System.out.println("when user click on checvron it should 
           further expands a window");

    }

    @Then("^click on Logout link$")
    public void click_on_Logout_link() throws Throwable {

        new LogoutPage(driver).clickToLogoutLink();

    }

}

Ожидаемые результаты: приложение должно быть автоматически автоматизировано для разных файлов определения шагов, и одновременно должен открываться только один браузер.

Фактические результаты: у меня есть файл с двухэтапным определением, и в будущем его будет несколько, я не смогу выполнить свой код для выхода из системы, он нормально работает для входа в систему и файл с одноэтапным определением, и он постоянно открывает браузер Chrome.

Ответы [ 2 ]

0 голосов
/ 12 апреля 2019

я бы предложил попробовать огурчик с qaf .С QAF вам не нужно управлять драйвером или не беспокоиться о странице.Все, что вам нужно, чтобы расширить WebdriverTestPage до класса вашей страницы, и все готово.Вы также можете иметь шаги в самом классе Page.Например, при использовании qaf ваша страница выхода из системы может выглядеть следующим образом:

public class LogoutPage extends WebDriverBaseTestPage<WebDriverTestPage>{

    @FindBy(locator="xpath=//*[@class='icon']")
    public WebElement chevron;

    @FindBy(locator="xpath=//a[@class='logout-link']")
    public WebElement logoutlink;

    public void clickTochevron() {
        chevron.click();
    }

    //@Then("^click on Logout link$") //you can use cucumber or qaf step annotation
    @QAFTestStep(description="click on Logout link")
    public void clickToLogoutLink() {

        link.click();
    }
}

Управление браузером (открытие / закрытие браузера) осуществляется QAF, поэтому в зависимости от конфигурации (последовательный / параллельный)) qaf обеспечит потокобезопасные сеансы дисков.

Кроме того, с помощью хранилище локаторов вы можете исключить один уровень класса страницы.Есть встроенные шаги, которые вы можете использовать напрямую.Например:

logoutpage.propeties

chevron.icon.loc=xpath=//*[@class='icon']
logout.link.loc=xpath=//a[@class='logout-link']

в вашем BDD вы можете напрямую использовать встроенные шаги, как показано ниже:

Scenario: name of scenario
   Given ...
   When ...
   Then verify 'chevron.icon.loc' is present
   And click on 'logout.link.loc'

Чтобы сделать ваш локатор информативным, вы можете сделать шаг вперед, как показано ниже:

logout.link.loc=xpath={"locator":"//a[@class='logout-link']","desc":"logout button"}

Описание будет использоваться в отчетах, чтобы сделать его более значимым.Существует множество других функций, которые имеют решающее значение для автоматизации функциональных испытаний.

0 голосов
/ 12 апреля 2019

Ваш шаг Then создает еще один экземпляр страницы, поэтому вы открываете несколько браузеров.

Попробуйте сделать это в вашем Logoutstepdef классе:

public class Logoutstepdef {

    public static WebDriver driver;
    PropertiesFileReader obj=new PropertiesFileReader();
    private LogoutPage logoutpage; 

    .....//the rest remains the same, until:

    @Then("^click on Logout link$")
    public void click_on_Logout_link() throws Throwable {

    logoutpage.clickToLogoutLink();

    }
}

ТамСхожие вопросы здесь и здесь .

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