失败:找不到使用定位器的元素:By(css selector,option [value =“xxx”])

时间:2018-04-23 21:06:47

标签: visual-studio-code protractor e2e-testing

我刚刚在VS Code中使用Protractor编写了我的第一个e2e测试。这是一个奇怪的问题,一直困扰着我好几天。我不时收到这个错误。我注意到有时当我关闭VS Code并重新打开它时。问题将消失。但是,它会在一段时间后回来。

test.spec.ts

fit('should have an quote price', async () => {
  await page.fillApplicantAge(0, '20');

  const tobaccoUsageSelection = page.getRadioButton('smoker', 'no');

  await page.clickElement(tobaccoUsageSelection);

  const planTypeSelection = page.getNamedRadioButton('planType', 'Single');

  await page.clickElement(planTypeSelection);

  const coverageTypeSelection = page.getNamedRadioButton('coverageType', 'Gold');

  await page.clickElement(coverageTypeSelection);

  await page.fillApplicantEffectiveDate(0, 'today');

  await page.fillApplicantExpiryDate(0, 'next month');

  await page.setSelectBoxValueInsideChildComponent('destination', 'New York');

  await page.fillTextBox('sumInsured', '5500');

  const priceElement = await page.getElementByCss('h3 .amount');

  expect(+(await priceElement.getText()).replace(',', '')).toBeGreaterThan(0);
});

并在test.po.ts文件中:

async setSelectBoxValueInsideChildComponent(formFieldName: string, value: string) {
   const formField = element(by.css(`[formControlName="${formFieldName}"] select`))
  .element(by.css(`option[value="${value}"]`));

   await formField.click();
}

 getElementByCss(selector: string) {
   return element(by.css(selector));
}

因此应该成功运行此测试文件。它实际上已经成功运行了好几次。但有时候,“目的地”行引发错误,有时“h3 .amount”行会无缘无故地抛出错误。

失败:找不到使用定位器的元素:By(css selector,option [value =“xxx”])

屏幕闪烁并快速退出。所以我无法检查发生了什么。

我很困惑。到目前为止,我关闭了VS Code以解决问题。但它真的让我感到困惑,因为一旦我修改了某些东西,错误就会回来。

请帮忙!提前谢谢!

顺便说一句,我们如何在VS Code中调试e2e测试?我已尝试过互联网上的一些建议,没有任何效果...... :(

2 个答案:

答案 0 :(得分:0)

" No Access-Control-Allow-Origin'我重新启动VS Code之后就消失了....我也想出了为什么第二个" h3 .amount"失败。这是来自API的报价。我的localhost比其他开发人员慢。所以我实际上需要让浏览器等待几秒钟以确保报价存在。不知何故,使用" var EC = protractor.ExpectedConditions;"不适合我。

答案 1 :(得分:0)

解决“No Access-Control-Allow-Origin”问题编辑protractor.conf文件 并在chromeOptions的args中添加"--disable-web-security"

应该有点:

exports.config = {
  params: {
    test: 'hml'
  },
  directConnect: true,
  multiCapabilities: [
    {
      name: 'desktop',
      browserName: 'chrome',
      chromeOptions: {
        args: ['--disable-extensions --disable-web-security']
      },
      specs: ['./e2e/**/*.e2e-spec.ts', './e2e/**/*.e2e-spec.dsk.ts']
    }