Транспортир открывает и закрывает браузер Chrome немедленно, не выполняя полный сценарий

0

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

Ниже приведен фрагмент кода javascript, который я использовал для запуска:

var chai = require('chai');
var chaiAsPromised = require('chai-as-promised');
chai.use(chaiAsPromised);
var expect = chai.expect;
var myStepDefinitionsWrapper = function () {
    this.Given(/^that I login with valid user credentials$/, function (callback) {
        console.log("I'm in before URL");
        browser.driver.get('http://localhost:8000/#');
        console.log("I'm in after URL");
        browser.driver.wait(function() {
            console.log("I'm in Wait");
            return browser.driver.isElementPresent(by.xpath("//input[contains(@placeholder,'Username')]"));
        },10000);
        browser.driver.findElement(by.xpath("//input[contains(@placeholder,'Username')]")).then(function(username) {
            console.log("I'm in Username");
            username.sendKeys("welby");
        });
        browser.driver.findElement(by.xpath("//input[contains(@type,'password')]")).then(function(password) {
            console.log("I'm in Password");
            password.sendKeys("asdf");
        });

        browser.driver.findElement(by.xpath("//button[@type='submit']")).click();
        console.log("I'm after click");
        callback();
    });

     this.When(/^I click perform button in Tasks window$/, function (callback) {
         browser.waitForAngular();
         element(by.xpath("//*[text()[contains(.,'Smith, Sally')]]/following::td[2]/button[text()='Perform']")).click();
         console.log("Clicked Perform");
         callback();
    });
}

Вывод:

"C:\Program Files (x86)\JetBrains\WebStorm 10.0.4\bin\runnerw.exe" "C:\Program Files (x86)\nodejs\node.exe" node_modules\protractor\lib\cli.js E2E\protractor-conf.js Using the selenium server at http://127.0.0.1:4444/wd/hub [launcher] Running 1 instances of WebDriver 

 - I'm in before URL  
 - I'm in after URL
 - I'm after click
 - Clicked Perform

1 scenario (1 passed)  3 steps (3 passed)

[launcher] 0 instance(s) of WebDriver still running [launcher] chrome #1 passed

Process finished with exit code 0
Теги:
selenium
protractor

1 ответ

2
Лучший ответ

Судя по стилю кода в вашем вопросе, вы, кажется, используете Cucumber.js для своего тестового бегуна. В этом случае вы должны опустить параметр callback в свои определения шагов и просто вернуть обещание:

this.Given(/^that I login with valid user credentials$/, function () {

    // The rest of the code remains the same.

    return browser.driver.findElement(by.xpath("//button[@type='submit']")).click();
});

А также:

 this.When(/^I click perform button in Tasks window$/, function () {
     browser.waitForAngular();
     return element(by.xpath("//*[text()[contains(.,'Smith, Sally')]]/following::td[2]/button[text()='Perform']")).click();
});

Возможности Cucumber.js для использования обещаний описаны здесь.

Транспортир построен на селене. Я настоятельно рекомендую прочитать весь раздел "Понимание API" документации Selenium, чтобы вы поняли, как обещает версия JavaScript Selenium и последовательности.

Причина, по которой ваш код не работает прямо сейчас, заключается в том, что, вызывая callback() как и вы, вы сообщаете Cucumber.js, что ваш шаг завершен до того, как Protractor (и Selenium) выполнил нужные действия. Когда вы вернете обещание, Cucumber.js ждет, пока обещание не будет разрешено или не сработает, прежде чем двигаться дальше.

  • 0
    Наблюдение: почему-то, когда Луи отвечает, я прокручиваю гораздо больше.
  • 0
    Спасибо Луи. Я удалил операторы обратного вызова и в конце методов, используя return, как показано на рисунке. Это работает для меня.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню