Jasmine:Expect没有实际价值

时间:2015-09-03 09:27:25

标签: selenium-webdriver jasmine protractor angularjs-e2e e2e-testing

这是:Expect: does not get the actual value

的第二部分

我能够更好地再现它,所以我拥有:

expect((rfpPage.buttons.sendRequest).getAttribute('disabled')).toBe('true');

(rfpPage.inputs.firstName).sendKeys('Name');
(rfpPage.inputs.lastName).sendKeys('Surname');
(rfpPage.inputs.email).sendKeys('name@email.com');
(rfpPage.inputs.phone).sendKeys('1234312');
(rfpPage.inputs.company).sendKeys('Company');
(rfpPage.inputs.address).sendKeys('Leningrad Motorway');
(rfpPage.inputs.city).sendKeys('Moscow');
(rfpPage.inputs.postalCode).sendKeys('125171');
(rfpPage.inputs.eventName).sendKeys('Test Meeting');

expect((rfpPage.buttons.sendRequest).getAttribute('disabled')).toBe(null);

HTML: 表格未填写时:

<button type="submit" class="btn btn-lg btn-warning pull-right ng-binding" ng-disabled="!rfpForm.$valid || isWaitForRfp" disabled="disabled">Send Request
</button>

填写表格时填写:

<button type="submit" class="btn btn-lg btn-warning pull-right ng-binding" ng-disabled="!rfpForm.$valid || isWaitForRfp"> Send Request
</button>

会发生什么:

  • 所有必填字段都已填充。
  • 发送请求按钮变为启用(禁用属性从DOM中删除)

第二个期望失败,说期望真为空。

这个测试在3-4台机器上本地工作,在多个浏览器上的browserstack上,在酱油上工作了好几个月。

*现在:它在BrowserStack上通过Jenkins执行时开始失败。 如果我在远程桌面计算机上本地运行此测试(Jenkins执行测试),它仍然运行正常。在几台机器上本地运行正常。在BrowserStack上本地运行正常。 *

我在这里有量角器2.2.0和Jasmine 2.3.4

在我看来,控制流程出了问题,但实际上它是非常奇怪的东西,我确实希望明确等待删除这个属性,因为它会有所帮助,但看起来它不是正确的解决方案。

第二个样本:

    expect(contactInfoPage.selectors.contactInfoSection.companyName.isDisplayed()).toBe(false);
contactInfoPage.selectors.contactInfoSection.isCorporate.click();
expect(contactInfoPage.selectors.contactInfoSection.companyName.isDisplayed()).toBe(true);
点击之前

DOM:

<input tabindex="11" type="text" ng-model="contactInfo.companyName" id="companyName" ng-required="isCorporateEvent" class="ng-valid-maxlength ng-touched ng-valid ng-valid-required" maxlength="80">
点击后

DOM:

<input tabindex="11" type="text" ng-model="contactInfo.companyName" id="companyName" ng-required="isCorporateEvent" class="ng-valid-maxlength ng-touched required ng-invalid ng-invalid-required" maxlength="80" required="required">

错误:期望true为假

3 个答案:

答案 0 :(得分:1)

我实际上会使用webdriver提供的内容 - isEnabled()检查。

根据webdriver spec,它的逻辑检查表单元素是否具有disabled属性:

  

如果表单控件为disabled,则将enabled设置为false。

     

如果满足以下任何条件,则禁用表单控件:

     
      
  • 元素是按钮,输入,选择或textarea元素,以及   在此元素上指定disabled属性(无论其是什么   值)。
  •   
  • 元素是fieldset元素的后代   已指定disabled属性,并且不是该属性的后代   fieldset元素的第一个元素子元素,如果有的话。
  •   
expect(rfpPage.buttons.sendRequest.isEnabled()).toBe(true);

答案 1 :(得分:1)

也许您只想等到提交按钮恢复为可点击状态。你试过这个吗?

  var EC = protractor.ExpectedConditions;
  browser.wait(EC.elementToBeClickable($('button[type="submit"]')), 10000);

答案 2 :(得分:0)

.IsEnabled()应该可以工作。我还建议使用elementexplorer快速找出结果