Этот вопрос может быть дубликатом, но я не такой, как ожидалось, поэтому подниму снова.
Я создаю новую платформу транспортира в нашем проекте.Мое приложение имеет экран входа в систему, который мне нужен, чтобы войти с различными данными пользователя для каждого случая в функции.У меня есть два сценария в файле объектов.Когда я запускаю, браузер должен открыть страницу входа в систему и выполнить некоторые действия и закрыть браузер для каждого сценария, и он должен делать то же самое для каждого сценария, но я не вижу, чтобы это произошло.Когда я бегу, это происходит для первого сценария, а со второго - не получается.Может ли кто-нибудь помочь мне в этом?
Я пробовал с разными вариантами с После ловушки, перезагрузитеBrowserBetweenTests, но не повезло.
conf.js
import { browser } from "protractor";
export const config = {
// chromeDriver: './drivers/chromedriver',
// seleniumServerJar: './drivers/selenium-server-standalone-3.12.0.jar',
seleniumAddress: 'http://localhost:4444/wd/hub',
// baseUrl: '<url>',
SELENIUM_PROMISE_MANAGER: false,
framework: 'custom',
frameworkPath: require.resolve('protractor-cucumber-framework'),
capabilities: {
'browserName': 'chrome',
'chromeOptions': {
'args': ['--disable-extensions=true']
}
},
// restartBrowserBetweenTests: true,
specs: [
'./features/*.feature'
],
cucumberOpts: {
require: [
'./features/step_definitions/*.js',
'./support/*.js'
],
format: ['json:results/report.json'],
tags: [
//"@smoke",
//"@regression"
],
strict: true
},
disableChecks: true,
onPrepare: function () {
browser.manage().deleteAllCookies();
browser.manage().window().maximize();
browser.ignoreSynchronization = true;
},
getPageTimeout: 100000,
allScriptsTimeout: 500000
}
крючки.ks
import { Before, BeforeAll, After, AfterAll } from "cucumber";
import { browser } from "protractor";
import { config } from "../protractorConf"
Before( {timeout: 2 * 20000}, async () => {
// await browser.get(config.baseUrl)
})
// After( {timeout: 2 * 5000}, async () => {
// await browser.close()
// })
AfterAll( {timeout: 2 * 5000}, async () => {
await browser.quit()
})
steps.js
import { Given, When, Then } from "cucumber"
import { expect } from "chai";
import { browser } from "protractor";
import * as loginPage from "../pages/loginPage"
import * as welcomePage from "../pages/welcomePage"
import * as verificationPage from "../pages/verificationPanelPage"
import * as homePage from "../pages/homePage";
const stepTimeoutExpiry = {timeout: 2 * 5000}
let globalLoanNumber = ""
Given(/^Launch SATURN app with "(.*?)" and "(.*?)"$/, stepTimeoutExpiry, async (user, pass) => {
await browser.get('<url>')
await loginPage.login(user, pass)
})
When(/^I search a loan by "(.*?)" as "(.*?)" in search page$/, stepTimeoutExpiry, async (searchType, loanNumber) => {
globalLoanNumber = loanNumber
await welcomePage.selectSearchType()
if (searchType === "Loan Number") {
await welcomePage.selectLoanNumber()
}
await welcomePage.enterLoanNumber(loanNumber)
await welcomePage.clickSearchAccountBtn()
})
When(/^I skip the verification details on verification page$/, stepTimeoutExpiry, async () => {
await verificationPage.skipVerification()
})
Then(/^I must see the Saturn "(.*?)" page for this account$/, stepTimeoutExpiry, async (homeText) => {
// await homePage.isHomeLinkAvailable()
expect(await homePage.isHomeLinkAvailable()).to.be.true
expect(await homePage.getAccountNumberText()).to.equal(globalLoanNumber)
})
файл функций
Feature: Running sample feature
Scenario: Login to Saturn and verify it works
Given Launch SATURN app with "user" and "pass"
When I search a loan by "Loan Number" as "0535003974" in search page
And I skip the verification details on verification page
Then I must see the Saturn "Home" page for this account
Scenario: Login to Saturn and verify it works for the second time
Given Launch SATURN app with "user" and "pass"
When I search a loan by "Loan Number" as "0535003974" in search page
And I skip the verification details on verification page
Then I must see the Saturn "Home" page for this account
нижеошибка при запуске.
λ npm run test
> protractortest@1.0.0 test c:\<user>\ATDDProtractorTest
> babel-node node_modules/protractor/bin/protractor protractorConf.js --presets-env
(node:12828) [DEP0022] DeprecationWarning: os.tmpDir() is deprecated. Use os.tmpdir() instead.
[10:55:12] I/launcher - Running 1 instances of WebDriver
[10:55:12] I/hosted - Using the selenium server at http://localhost:4444/wd/hub
.......F---.
Failures:
1) Scenario: Login to Saturn and verify it works for the second time # features\testone.feature:9
√ Before # support\hooks.js:5
× Given Launch SATURN app with "user" and "pass" # features\step_definitions\testOne.steps.js:13
Error: function timed out, ensure the promise resolves within 10000 milliseconds
at Timeout._onTimeout (c:\Manimaran\ATDDProtractorTest\node_modules\cucumber\src\user_code_runner.js:61:18)
at ontimeout (timers.js:475:11)
at tryOnTimeout (timers.js:310:5)
at Timer.listOnTimeout (timers.js:270:5)
- When I search a loan by "Loan Number" as "0535003974" in search page # features\step_definitions\testOne.steps.js:19
- And I skip the verification details on verification page # features\step_definitions\testOne.steps.js:30
- Then I must see the Saturn "Home" page for this account # features\step_definitions\testOne.steps.js:34
√ After # node_modules\protractor-cucumber-framework\lib\resultsCapturer.js:25
2 scenarios (1 failed, 1 passed)
8 steps (1 failed, 3 skipped, 4 passed)
0m20.442s
[10:55:40] I/launcher - 0 instance(s) of WebDriver still running
[10:55:40] I/launcher - chrome #01 failed 1 test(s)
[10:55:40] I/launcher - overall: 1 failed spec(s)
loginpage.js
import { element, by, browser } from "protractor";
const userName = element(by.id('username'));
const passWord = element(by.id('password'));
const signOn = element(by.xpath('.//a[contains(@title,"Sign In")]'));
const EC = protractor.ExpectedConditions
const isVisibilityOf = EC.visibilityOf(userName)
export const login = async (user, pass) => {
await browser.wait(isVisibilityOf, 10000)
await userName.sendKeys(user);
await passWord.sendKeys(pass);
await signOn.click();
}