- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
这个问题可能是重复的,但我并不像预期的那样,所以再次提出。
我正在我们的项目中创建一个新的 Protractor 框架。我的应用程序有登录屏幕,我需要为功能中的每个案例使用不同的用户详细信息登录。我在功能文件中有两个场景。当我运行时,浏览器应该打开登录页面并执行一些操作并为每个场景关闭浏览器,并且它必须为每个场景做同样的事情,但我没有看到这种情况发生。当我运行时,它发生在第一个场景中,从第二个场景开始失败。有人可以帮我吗?
我已经尝试了使用 After hook 的不同选项,restartBrowserBetweenTests 但没有运气。
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
}
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()
})
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)
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();
}
最佳答案
对于 Protractor ,在执行任何规范之前,浏览器实例( session )将被初始化并将 session 移交给规范运行器,规范运行器管理执行规范。
如果您想在每个场景/功能之后关闭 session ,您必须创建一个新 session 并将新 session 传递给原始规范运行器。我认为如果不深入学习 Protractor 源代码,对我们来说实现这一点并不容易。
我更喜欢从我们这边推荐以下更容易的解决方案:
1) 删除After
中的cookie钩子(Hook), Protractor 提供这样的API来做到这一点
2) 在 After hook
中打开注销 url如果你的应用有这样的 url,否则你
可以点击注销按钮。
实际上,您可以在 login
开头放置删除 cookie、打开注销 url 或单击注销按钮。功能,然后打开登录网址。有了 After
钩子(Hook)是不必要的。
关于protractor - 如何为功能中的每个场景关闭和打开浏览器 - Protractor 和 cucumberjs,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50415553/
我想阻止 cucumber 一直运行失败的测试,因为这会浪费我们持续集成的时间,因为我们需要快速反馈。 我正在使用带有 Protractor 的 cucumber cucumberJs 的 javas
使用 cypress-cucumber-preprocessor 1.5.1 运行 Cypress 3.1.1。我需要将一些静态数据从一个步骤传递到另一个步骤(在同一场景/测试中)。我可以使用别名来做
每当在远程服务器上运行时出现步骤失败时,我想捕获失败的步骤,然后继续运行剩余的场景。然后,捕获的步骤将包含在文件中以用于报告目的。这有可能吗?我在其他地方看到的所有回复都只是说您应该在继续之前修复测试
我正在使用 WebDriverIO 练习 CucumberJS 并进行测试 http://webdriver.io .我有以下功能文件和步骤定义,这工作正常。 功能文件 Feature: Applic
使用 CucumberJS是否有选项或配置可以在执行测试后捕获错误屏幕截图? 最佳答案 您可以通过cucumber After钩子(Hook)进行截图,如下所示: // supports/take-s
我正在使用 javascript for Cucumber javascript 进行自动化。我关心的是我可以自动为步骤定义生成 .js 文件吗?到目前为止,我正在从命令行窗口复制粘贴它们(步骤),所
我有以下功能文件: Feature: Color feature @test Scenario Outline: Test color Given the first
成功完成场景后,cucumberjs 无限期地挂起。我怎样才能停止这种情况? 我在 npm/nodejs 上运行了一个 cucumberjs。 package.json: { "name": "f
我正在尝试用 cucumberjs 做一个相对简单的场景。也就是说,在场景失败后,我想重新启动浏览器,以便它回到下一个场景的初始状态。这是我的尝试 this.After({timeout: 30 *
任务: 使用 selenium、webdriver 和 cucumberjs 执行自动验收测试。 找到一个失败的验收测试场景并截取页面 将其保存为 go 管道中的工件。 这是我今天的任务。我已经通过编
这个问题可能是重复的,但我并不像预期的那样,所以再次提出。 我正在我们的项目中创建一个新的 Protractor 框架。我的应用程序有登录屏幕,我需要为功能中的每个案例使用不同的用户详细信息登录。我在
使用 protractor-cucumber-framework 如何修改将在运行时输出步骤的 CucumberJs 的控制台输出。 功能示例场景: Given that Home Page is D
我正在尝试验证 cucumberjs/puppeteer 中不存在的选择器。如何使用 cucumber-assert 来使用 throws 断言? 我致力于测试自动化以支持测试 ember 前端应用程
我正在将 TestCafe 与 Cucumber.js 一起使用,但我不知道如何重新加载页面。 Testcafe 文档说使用 .eval(() => location.reload(true))这给了
所以我已经实现了一个 Cucumberjs 数据表,但是我认为我做得不对..这是我所拥有的 this.And(/^If I click the row "([^"]*)" then I should
我正在尝试将多个格式化程序传递到我的 cucumberjs cli 运行程序中,我希望两者都打印到控制台,并生成一个 json 文件。 我使用的是cucumberjs v0.8.0 我尝试过的事情:
我向我的 cucumberOpts 添加了快速失败功能,如下所示: cucumberOpts: { require: [ conf.paths.e2e + '/utilities/hooks.
鉴于自动化 UI 测试有时会由于不稳定而失败,因此仅重新运行失败的测试的能力在 Protractor 等框架中变得非常有用。 不幸的是,截至 2016 年 9 月 13 日,无法使用 Protract
我正在实现一个 CucumberJS 场景,它在两个不同的步骤定义文件中使用多个步骤。第一步在世界上设置一些变量,其他步骤定义文件中的步骤必须使用这些变量。 变量设置正确,但是当其他文件上的步骤试图读
如何将 jasmine 与 cucumberjs 一起使用? 我尝试了来自 https://stackoverflow.com/a/30763260/5453732 的解决方案 但我总是遇到这个错误:
我是一名优秀的程序员,十分优秀!