【问题标题】:Protractor acting randomly or occasionally not starting量角器随机动作或偶尔不启动
【发布时间】:2018-07-16 07:56:17
【问题描述】:

我的任务是编写不同的测试套件和任务自动化,但 Protractor 在过去几天一直以一种非常奇怪的方式行事,而且......我只是不记得与上次我的套件相比有什么改变运行正确。

目前正在使用最新的驱动程序

% ./node_modules/webdriver-manager/bin/webdriver-manager status
webdriver-manager: using local installed version 12.1.0
[09:14:25] I/status - selenium standalone version available: 3.13.0 [last]
[09:14:25] I/status - chromedriver version available: 2.40 [last]
[09:14:25] I/status - geckodriver version available: v0.21.0 [last]
[09:14:25] I/status - android-sdk is not present
[09:14:25] I/status - appium is not present

看起来是最新的 Protractor 版本

% ./node_modules/protractor/bin/protractor --version
Version 5.3.2

这就是 Protractor 的输出在 80% 的情况下不运行时的样子:

% ./node_modules/protractor/bin/protractor ./conf.js --suite scenarios --params.login.usr=$USR_E2E --params.login.pwd=$PWD_E2E --params.env=test
(node:1709) [DEP0022] DeprecationWarning: os.tmpDir() is deprecated. Use os.tmpdir() instead.
[09:03:07] W/driverProviders - Using driver provider hosted, but also found extra driver provider parameter(s): seleniumServerJar
[09:03:07] I/launcher - Running 1 instances of WebDriver
[09:03:07] I/hosted - Using the selenium server at http://localhost:4444/wd/hub
[09:03:08] E/launcher - Error: NoSuchElementError: no such element: Unable to locate element: {"method":"css selector","selector":"[type="email"]"}
  (Session info: headless chrome=67.0.3396.99)
  (Driver info: chromedriver=2.40.565386 (45a059dc425e08165f9a10324bd1380cc13ca363),platform=Mac OS X 10.14.0 x86_64)
    at <anonymous>
    at process._tickCallback (internal/process/next_tick.js:188:7)
[09:03:08] E/launcher - Process exited with error code 100

对应的webdriver-manager的输出

% ./node_modules/webdriver-manager/bin/webdriver-manager start
webdriver-manager: using local installed version 12.1.0
[09:30:49] I/start - java -Dwebdriver.chrome.driver=/Users/cyril/Projects/parkopoly_e2e/node_modules/webdriver-manager/selenium/chromedriver_2.40 -Dwebdriver.gecko.driver=/Users/cyril/Projects/parkopoly_e2e/node_modules/webdriver-manager/selenium/geckodriver-v0.21.0 -jar /Users/cyril/Projects/parkopoly_e2e/node_modules/webdriver-manager/selenium/selenium-server-standalone-3.13.0.jar -port 4444
[09:30:49] I/start - seleniumProcess.pid: 1791
09:30:49.534 INFO [GridLauncherV3.launch] - Selenium build info: version: '3.13.0', revision: '2f0d292'
09:30:49.535 INFO [GridLauncherV3$1.launch] - Launching a standalone Selenium Server on port 4444
2018-07-16 09:30:49.613:INFO::main: Logging initialized @282ms to org.seleniumhq.jetty9.util.log.StdErrLog
09:30:49.752 INFO [SeleniumServer.boot] - Selenium Server is up and running on port 4444
09:30:55.414 INFO [ActiveSessionFactory.apply] - Capabilities are: {
  "browserName": "chrome",
  "chromeOptions": {
    "args": [
      "--disable-extensions",
      "--show-fps-counter=true",
      "--disable-infobars",
      "--incognito",
      "--disable-gpu",
      "--headless"
    ]
  },
  "count": 1
}
09:30:55.415 INFO [ActiveSessionFactory.lambda$apply$11] - Matched factory org.openqa.selenium.remote.server.ServicedSession$Factory (provider: org.openqa.selenium.chrome.ChromeDriverService)
Starting ChromeDriver 2.40.565386 (45a059dc425e08165f9a10324bd1380cc13ca363) on port 24866
Only local connections are allowed.
09:30:55.951 INFO [ProtocolHandshake.createSession] - Detected dialect: OSS
09:30:56.171 INFO [RemoteSession$Factory.lambda$performHandshake$0] - Started new session 9ea12201cba04ac9e41639501f0c02e1 (org.openqa.selenium.chrome.ChromeDriverService)
09:30:56.925 INFO [ActiveSessions$1.onStop] - Removing session 9ea12201cba04ac9e41639501f0c02e1 (org.openqa.selenium.chrome.ChromeDriverService)

这是我目前正在使用的 conf.js 文件:

const SpecReporter = require('jasmine-spec-reporter').SpecReporter;

exports.config = {
  SELENIUM_PROMISE_MANAGER: false,
  rootElement: 'html',
  seleniumServerJar: './bin/selenium-server-standalone-3.12.0.jar',
  seleniumPort: '4444',
  seleniumAddress: 'http://localhost:4444/wd/hub',
  framework: 'jasmine2',
  directConnect: false,
  specs: ['./e2e/**/*.spec.js'],
  suites: {
    cft: './e2e/cft/**/*.spec.js',
    scenarios: './e2e/scenarios/**/*.scenario.js'
  },
  jasmineNodeOpts: {
    isVerbose: true,
    defaultTimeoutInterval: 15000,
    print: function() {}
  },
  capabilities: {
    browserName: 'chrome',
    chromeOptions: {
      args: ['--disable-extensions', '--show-fps-counter=true', '--disable-infobars', '--incognito', '--disable-gpu', '--headless']
    }
  },
  onPrepare: async function() {
    browser.params.ts = Date.now();
    if (browser.params.env === undefined)
      browser.params.env = 'test';
    await jasmine.getEnv().addReporter(new SpecReporter({
      spec: {
        displayStackTrace: true,
        displaySuccessful: true,
        displayFailed: true,
        displayPending: true,
        displaySpecDuration: true,
        displaySuiteNumber: true
      },
      summary: {
        displayFailures: true,
        displayPending: false
      },
      colors: {
        enabled: true,
        successful: 'green',
        failed: 'red',
        pending: 'yellow'
      }
    }));
    await browser.get('https://dashboard-' + browser.params.env + '.website.com');
    await browser.driver.findElement(by.css('[type="email"]')).sendKeys(browser.params.login.usr);
    await browser.driver.findElement(by.css('[type="password"]')).sendKeys(browser.params.login.pwd);
    await browser.driver.findElement(by.css('[type="submit"]')).click();
    return await browser.driver.wait(function() {
      return browser.driver.getCurrentUrl().then(function(url) {
        return /calendar_bo/.test(url);
      });
    }, 10000);
  }
};

有时,每当 Protractor 启动和启动测试时,它都会受到竞争条件的影响。 我找不到任何线程、帖子、评论或任何曾经有过此类输出的人。我的想法已经用完了,我会很感激任何想法或潜在的解决方案。谢谢!

【问题讨论】:

    标签: selenium-webdriver protractor


    【解决方案1】:

    没有足够的声誉来发表评论..

    可能是您同时配置了一个 seleniumServerJar 和一个 seleniumAddress 吗?文档指定仅使用 1。

    Protractor 需要知道如何连接到它的浏览器的驱动程序 正在测试。这通常通过 Selenium 服务器完成。
    有五个选项 - 指定以下选项之一:

    1. seleniumServerJar - 在本地启动一个独立的 Selenium 服务器。
    2. seleniumAddress - 连接到已经运行的 Selenium 服务器。
    3. sauceUser/sauceKey - 通过 Sauce Labs 使用远程 Selenium 服务器。
    4. browserstackUser/browserstackKey - 通过 BrowserStack 使用远程 Selenium 服务器。
    5. directConnect - 直接连接到浏览器驱动程序。此选项仅适用于 Firefox 和 Chrome。

    【讨论】:

    • 您好,感谢您的回答。 [09:03:07] W/driverProviders - Using driver provider hosted, but also found extra driver provider parameter(s): seleniumServerJar Protractor 总是用来忽略额外的参数。我试过评论不需要的参数并只保留 seleniumAddress 但问题仍然存在,遗憾的是。
    【解决方案2】:

    您可以在电子邮件发送密钥之前尝试此代码吗:

    var EC = protractor.ExpectedConditions;
    var email_element = element(by.css('[type="email"]'));
    browser.wait(EC.visibilityOf(email_element), 10000);
    

    【讨论】:

    • 这本身并没有解决我的问题,但它帮助我弄清楚了真正的问题是什么。可悲的是,这超出了我的能力范围,但是通过您提出的检查和browser.wait(),我添加了一些冗长的内容,使我和其他所有人都更清楚。谢谢。
    猜你喜欢
    • 1970-01-01
    • 2017-08-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-08-28
    • 2011-05-20
    • 1970-01-01
    相关资源
    最近更新 更多