Jasmine 如果套件中的文件超过1个,则“量角器--套件”选项将失败

Jasmine 如果套件中的文件超过1个,则“量角器--套件”选项将失败,jasmine,protractor,Jasmine,Protractor,第一次问这样的问题,我希望我做得对 每当我在一个包含多个文件的套件上运行dragrator authenticated.conf.js--suite suitename时,它都会失败-它将登录到我的dragrator.helper.loginToPage()登录到基本页面(localhost:3000),然后在不关闭网页的情况下抛出错误 我在同一个文件夹中抛出了另一个*.spec.js文件,运行了完全相同的命令,但失败了 错误 /usr/local/lib/node_modules/protra

第一次问这样的问题,我希望我做得对

每当我在一个包含多个文件的套件上运行
dragrator authenticated.conf.js--suite suitename
时,它都会失败-它将登录到我的
dragrator.helper.loginToPage()
登录到基本页面(localhost:3000),然后在不关闭网页的情况下抛出错误

我在同一个文件夹中抛出了另一个*.spec.js文件,运行了完全相同的命令,但失败了

错误

/usr/local/lib/node_modules/protractor/node_modules/selenium-webdriver/lib/atoms/error.js:113
  var template = new Error(this.message);
                 ^
NoSuchElementError: no such element
  (Session info: chrome=44.0.2403.107)
  (Driver info: chromedriver=2.15.322448 (52179c1b310fec1797c81ea9a20326839860b7d3),platform=Linux 3.16.0-44-generic x86_64)
    at new bot.Error (/usr/local/lib/node_modules/protractor/node_modules/selenium-webdriver/lib/atoms/error.js:113:18)
    at Object.bot.response.checkResponse (/usr/local/lib/node_modules/protractor/node_modules/selenium-webdriver/lib/atoms/response.js:106:9)
    at /usr/local/lib/node_modules/protractor/node_modules/selenium-webdriver/lib/webdriver/webdriver.js:377:20
    at [object Object].promise.ControlFlow.runInFrame_ (/usr/local/lib/node_modules/protractor/node_modules/selenium-webdriver/lib/webdriver/promise.js:1877:20)
    at [object Object].promise.Callback_.goog.defineClass.notify (/usr/local/lib/node_modules/protractor/node_modules/selenium-webdriver/lib/webdriver/promise.js:2464:25)
    at [object Object].promise.Promise.notify_ (/usr/local/lib/node_modules/protractor/node_modules/selenium-webdriver/lib/webdriver/promise.js:563:12)
    at Array.forEach (native)
    at Object.goog.array.forEach (/usr/local/lib/node_modules/protractor/node_modules/selenium-webdriver/lib/goog/array/array.js:203:43)
    at [object Object].promise.Promise.notifyAll_ (/usr/local/lib/node_modules/protractor/node_modules/selenium-webdriver/lib/webdriver/promise.js:552:16)
    at [object Object].goog.async.run.processWorkQueue [as _onTimeout] (/usr/local/lib/node_modules/protractor/node_modules/selenium-webdriver/lib/goog/async/run.js:125:21)
From: Task: WebElement.sendKeys()
    at [object Object].webdriver.WebDriver.schedule (/usr/local/lib/node_modules/protractor/node_modules/selenium-webdriver/lib/webdriver/webdriver.js:360:15)
    at [object Object].webdriver.WebElement.schedule_ (/usr/local/lib/node_modules/protractor/node_modules/selenium-webdriver/lib/webdriver/webdriver.js:1815:23)
    at [object Object].webdriver.WebElement.sendKeys (/usr/local/lib/node_modules/protractor/node_modules/selenium-webdriver/lib/webdriver/webdriver.js:1986:17)
    at Object.exports.loginToPage (/home/allison/Devspace/client/test/e2e/helperFunctions.js:11:63)
    at Suite.<anonymous> (/home/allison/Devspace/client/test/e2e/authenticated/students.spec.js:41:21)
    at addSpecsToSuite (/usr/local/lib/node_modules/protractor/node_modules/jasmine/node_modules/jasmine-core/lib/jasmine-core/jasmine.js:743:25)
    at Env.describe (/usr/local/lib/node_modules/protractor/node_modules/jasmine/node_modules/jasmine-core/lib/jasmine-core/jasmine.js:713:7)
    at jasmineInterface.describe (/usr/local/lib/node_modules/protractor/node_modules/jasmine/node_modules/jasmine-core/lib/jasmine-core/jasmine.js:3219:18)
    at Object.<anonymous> (/home/allison/Devspace/client/test/e2e/authenticated/students.spec.js:1:63)
    at Module._compile (module.js:456:26)
students.spec.js片段

  protractor.helper.loginToPage();

  var expected = protractor.ExpectedConditions;
  var newStudentUrl = "";

  it('should show new student in listings when the new student form is filled and Save button is clicked', function() {
    browser.get('/en/student/listing/509');

    ...
helperFunctions.js

'use strict'

// An example configuration file.
exports.config = {
  directConnect: true,

  chromeOnly: true,

  onPrepare: function() {
    //browser.driver.get(env.baseUrl)
    protractor.helper = require('./helperFunctions.js');

  },


  baseUrl: 'http://localhost:3000/',

  // Capabilities to be passed to the webdriver instance.
  capabilities: {
    'browserName': 'chrome'
  },

  // Framework to use. Jasmine 2 is recommended.
  framework: 'jasmine2',

  // Spec patterns are relative to the current working directly when
  // protractor is called.
  specs: [
    'authenticated/*.spec.js',
    'invoices/*.spec.js',
    'partners/*.spec.js',
    'quotes/*.spec.js',
    'settings/*.spec.js',
  ],

  // to specify a single FILE to run, run "protractor authenticated.conf.js --specs file.spec.js"
  // to specify ONE suite to run, type "protractor authenticated.conf.js --suite quotes"
  suites: {
    quotes: 'quotes/*.spec.js',
    students: 'authenticated/*.spec.js',
    invoices: 'invoices/*.spec.js',  
    settings: 'settings/*.spec.js',
    partners: './partners/*.spec.js'
  },

  // Options to be passed to Jasmine.
  jasmineNodeOpts: {
    defaultTimeoutInterval: 240000,
    showColors: true
  },

  allScriptsTimeout: 50000, //takes a while to login and load STudent page

};
exports.loginToPage = function(url) {
    browser.driver.get('http://localhost:3000/');
    browser.waitForAngular();

    browser.driver.findElement(by.css('input[name="email"]')).sendKeys('user@something.com');
    browser.driver.findElement(by.css('input[name="password"]')).sendKeys('password');
    browser.driver.findElement(by.css('button[type="submit"]')).click();

    return browser.driver.wait(function() {
      return browser.driver.getCurrentUrl().then(function(url) {
        return /\/en\/$/.test(url);
      });
    }, 15000);

};

我最近看到很多这样的行为,而且。好像那里有个虫子。我有随机不及格的测试。我已经尝试了所有我能想到的方法来修复它们,但唯一有效的方法似乎是放置一个短的
浏览器。睡眠
帮助轻推等待:)

尝试在提交按钮之后或调用
getCurrentUrl()
之前放置一个
browser.sleep(420)
。(420毫秒,因为这很有趣:)但这方面的一些东西一直在为我工作)


虽然不是一个解决方案(使用
browser.sleep
会伤害我的灵魂),但它现在是一个解决办法。这比不可靠的测试要好

非常感谢!请原谅,我的回复太晚了,我正在做其他事情。我不知道这是另一个浏览器等待/页面未加载错误-我被错误消息误导,说是“.sendKeys()”我不是100%确定解决方案,但到目前为止似乎有效的是,添加了
browser.driver.sleep(1000)
(不确定浏览器.sleep和浏览器.driver.sleep是否有很大区别),并将我的
loginToPage()
移动到
authenticated.conf.js:onPrepare()
。运行时对loginToPage()的任何额外调用——套件都会给我带来错误。