Jasmine:Expect 没有得到实际值
Jasmine: Expect does not get 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 中删除禁用的属性)
第二个 expect 失败说 expect true 为 null。
这个测试在 3-4 台机器上本地运行良好,在多个浏览器上的 browserstack 上,在 saucelabs 上运行了几个月。
*现在:当它通过 Jenkins 在 BrowserStack 上执行时开始失败。
如果我 运行 在远程桌面计算机(从 Jenkins 执行测试的地方)上进行本地测试,它仍然 运行 没问题。在几台机器上本地它仍然 运行 没问题。在 BrowserStack 上本地 运行 没问题。 *
我这里有 Protractor 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 为 false
我实际上会使用 webdriver 提供的功能 - isEnabled()
检查。
根据 webdriver spec,在其逻辑中,它检查表单元素是否具有 disabled
属性:
Set enabled to false if a form control is disabled.
A form control is disabled if any of the following conditions are met:
- The element is a button, input, select, or textarea element, and the
disabled attribute is specified on this element (regardless of its
value).
- The element is a descendant of a fieldset element whose
disabled attribute is specified, and is not a descendant of that
fieldset element's first legend element child, if any.
expect(rfpPage.buttons.sendRequest.isEnabled()).toBe(true);
也许您只是想等到提交按钮恢复为可点击状态。你试过这个吗?
var EC = protractor.ExpectedConditions;
browser.wait(EC.elementToBeClickable($('button[type="submit"]')), 10000);
.IsEnabled() 应该有效。另外我推荐使用 elementexplorer 来快速找出结果
这是第二部分:
我能够更好地重现它,所以我有:
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 中删除禁用的属性)
第二个 expect 失败说 expect true 为 null。
这个测试在 3-4 台机器上本地运行良好,在多个浏览器上的 browserstack 上,在 saucelabs 上运行了几个月。
*现在:当它通过 Jenkins 在 BrowserStack 上执行时开始失败。 如果我 运行 在远程桌面计算机(从 Jenkins 执行测试的地方)上进行本地测试,它仍然 运行 没问题。在几台机器上本地它仍然 运行 没问题。在 BrowserStack 上本地 运行 没问题。 *
我这里有 Protractor 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 为 false
我实际上会使用 webdriver 提供的功能 - isEnabled()
检查。
根据 webdriver spec,在其逻辑中,它检查表单元素是否具有 disabled
属性:
Set enabled to false if a form control is disabled.
A form control is disabled if any of the following conditions are met:
- The element is a button, input, select, or textarea element, and the disabled attribute is specified on this element (regardless of its value).
- The element is a descendant of a fieldset element whose disabled attribute is specified, and is not a descendant of that fieldset element's first legend element child, if any.
expect(rfpPage.buttons.sendRequest.isEnabled()).toBe(true);
也许您只是想等到提交按钮恢复为可点击状态。你试过这个吗?
var EC = protractor.ExpectedConditions;
browser.wait(EC.elementToBeClickable($('button[type="submit"]')), 10000);
.IsEnabled() 应该有效。另外我推荐使用 elementexplorer 来快速找出结果