【问题标题】:Why browser.get method does not go to specified url?为什么 browser.get 方法不去指定的 url?
【发布时间】:2019-12-12 20:50:54
【问题描述】:

我有一个这样的文件夹结构: project structure

我正在关注this tutorial

我的 package.json 文件是这样的:

{
  "name": "node_cucumber_e2e",
  "version": "1.0.1",
  "description": "Sample E2E by Bill to learn cucumber and protractor",
  "main": "index.js",
  "scripts": {
    "start": "node index.js",
    "start-driver": "node .\\node_modules\\protractor\\bin\\webdriver-manager start",
    "update-driver": "node .\\node_modules\\protractor\\bin\\webdriver-manager update",
    "protractor": "node .\\node_modules\\protractor\\bin\\protractor configs/protractor.conf.js"
  },
  "keywords": [
    "Sample_project",
  ],
  "author": "",
  "license": "MIT",
  "devDependencies": {
    "protractor": "^5.4.2"
  }
}

我做以下事情:

  1. 在本地安装 protractor
  2. 通过npm run update-driver更新webdriver-manager
  3. 通过npm run start-driver启动webdriver-manager
  4. 编辑 protractor.conf,如下所示
exports.config = {
    seleniumAddress: 'http://localhost:4444/wd/hub',
    specs: [`../tests/e2e/specs/*.js`],
    baseURL: 'http://localhost:8080/',  
    framework: 'jasmine',
  }

然后当我尝试通过npm run protractor 启动量角器时,浏览器是打开的,但是它没有转到我指定的 url,控制台是这个 ==> output console

我的spec js文件是,希望有人能帮帮我

describe('Protractor Demo App', function() {
    it ('should have a title', function() {
        browser.get('https://juliemr.github.io/protractor-demo/');
        expect(browser.getTitle()).toEqual('Super Calculator');
    });
});

【问题讨论】:

  • 您提供的教程在browser.get的返回值上调用then,这意味着browser.get返回一个Promise。您还应该致电then 或切换到async/await。我查看了the documentationbrowser.get 并且它具有误导性,看起来该方法不是同步的,查看the actual codebrowser.get 它肯定是返回一个Promise
  • @JakeHolzinger 在低于 6 的量角器版本(OP 正在使用)中,除非使用配置中的 SELENIUM_PROMISE_MANAGER:false 设置明确禁用,否则使用 webdriverJS 的承诺管理器在幕后处理承诺。这允许以上述方式编写异步操作。我不知道为什么那个教程是这样写的,因为那不应该是必需的。 OP,您可以尝试在 .get 之后添加 browser.driver.sleep(5000) 并验证相同的行为吗

标签: javascript node.js testing protractor


【解决方案1】:

这里需要注意的几件事:

  1. 调用 selenium 驱动程序运行测试的方式。还有其他方法可以做到这一点。我更喜欢使用directConnect = true 并选择headless 选项,以便能够更好地调试遇到问题的地方。 protractor-conf.js文件参考以下代码sn-p:

    export const config: Config = {
      directConnect: true,
       capabilities: {
           'browserName': 'chrome',
            chromeOptions: {
                 //args: [ "--headless", "--disable-gpu" ]
           },
       },
    }
    
  2. 由于browser.get() & browser.getTitle() 是我们正在进行的异步调用,您可以使用then()await 处理每个完成的async 调用返回的承诺。

    我更喜欢使用async/await 来处理此类调用,我会将spec 重写为:

       describe('Protractor Demo App',() => {
         it ('should have a title', async() => {
            await browser.get('https://juliemr.github.io/protractor-demo/');
            expect(await browser.getTitle()).toEqual('SuperCalculator');
        });
       });
    

    IMO 它有助于更​​有效地处理承诺,同时保持我的代码干净。 让我知道这是否适合你!

进一步改进

要在您的package.json 中更新 webdriver-manager 使用,

 "webdriver-update": "./node_modules/protractor/bin/webdriver-manager update"

而不是npm run update-driver

【讨论】:

    猜你喜欢
    • 2013-09-29
    • 1970-01-01
    • 2022-10-05
    • 1970-01-01
    • 2012-06-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-13
    相关资源
    最近更新 更多