2

我遇到了非常奇怪的问题。我每天在 Jenkins 上运行一组测试,并且没有任何明显的变化,一些断言(预期)开始失败。这里奇怪的是,只有当我在 Browserstack 上执行来自 Jenkins 的测试时,它们才会失败。在本地一切都很好,在本地浏览器堆栈上一切都很好,在 saucelabs 上一切都很好。我有 3 个具有类似期望的 it() 块:

value1 = $('.someclass');
value2 = ..
value3 = ..
expect(value1.getText()).toContain('tratata');
expect(value2.getText()).toContain('uhuhuhu');
expect(value3.getText()).toContain('ahahaha');

它们都位于不同的 it() 块中。现在奇怪的事情:

当我执行测试时,第一个断言块的测试通过就好了,在第二个它块上它说断言失败(我做了一些事情以更改值),但是手动/本地我看到一切都很好。此外,在执行测试时,我看到值正在发生变化(我什至做了截图并检查了 browserstack 上的可视日志)。在第三个它块中,我做了其他操作并再次断言失败,但是它将它与我在第 2 步中预期的值进行比较,而不是第 1 步!所以看起来由于某种原因我落后了一步......如果我评论它阻止或只是在第一次测试中断言,第二次通过正常,但第三次失败。如果我评论 2 它会阻止,第三次通过就好了。

出于某种原因,在这种特殊情况下听起来像这样,一些魔法发生了,而且只在 Jenkins 和 Browserstack 上。顺便说一句,测试已经工作了一段时间没有任何问题,并且开始失败而没有任何更新。

我虽然出于某种原因我在控制流方面遇到了问题,但我还在等待要呈现的元素,我尝试了 browser.sleep() 反模式来更好地调查它,但它神奇地一直落后。

我不是直接寻找特定的解决方案,但任何建议都将受到高度赞赏,我不确定我应该提供哪些附加信息,希望我能充分描述问题。

@量角器2.1.0 @jasmine2.3.2

browser.ignoreSynchronization = false



  it('', function () {
        expect(viewBookingDetailsPage.totalCostSection.depositDue.getText()).toContain('542.00');
        expect(viewBookingDetailsPage.totalCostSection.remainingBalance.getText()).toContain('4,878.00');
        expect(viewBookingDetailsPage.totalCostSection.totalDepositAmount.getText()).toContain('5,420.00');
    });


it('', function () {
        $(viewBookingDetailsPage.eventAndItemsSection.addItemsBtn).click();
        helper.waitElementToBeVisisble(viewBookingDetailsPage.addItemsModal.modalOpen);

        viewBookingDetailsPage.addonItemAttribute(0, viewBookingDetailsPage.addItemsModal.events).click();

        helper.waitElementToBeVisisble(viewBookingDetailsPage.addItemsModal.eventSelectionPopup);

        viewBookingDetailsPage.addItemsModal.availableEvents.then(function (events) {
            //Morning event
            events[3].$('i').click();
            viewBookingDetailsPage.addonItemAttribute(0, viewBookingDetailsPage.addItemsModal.selectItem).click();
            viewBookingDetailsPage.addonItemAttribute(1, viewBookingDetailsPage.addItemsModal.selectItem).click();
            viewBookingDetailsPage.addItemsModal.addButton.click();

            helper.waitElementToDisappear(viewBookingDetailsPage.addItemsModal.modalOpen);
            helper.waitElementToBeVisible(viewBookingDetailsPage.addonItemDetail(0, 0, 0, viewBookingDetailsPage.eventAndItemsSection.itemName));

            expect(viewBookingDetailsPage.totalCostSection.depositDue.getText()).toContain('592.00');
            expect(viewBookingDetailsPage.totalCostSection.remainingBalance.getText()).toContain('5,328.00');
            expect(viewBookingDetailsPage.totalCostSection.totalDepositAmount.getText()).toContain('5,920.00');
        });
    });

     it('', function () {

        viewBookingDetailsPage.addonItemDetail(0, 0, 0, viewBookingDetailsPage.eventAndItemsSection.removeItem).click();  ----- method just returns element into multiple internal repeaters

        expect(viewBookingDetailsPage.totalCostSection.depositDue.getText()).toContain('580.00');
        expect(viewBookingDetailsPage.totalCostSection.remainingBalance.getText()).toContain('5,220.00');
        expect(viewBookingDetailsPage.totalCostSection.totalDepositAmount.getText()).toContain('5,800.00');
    });
4

2 回答 2

1

我通过直接等待文本更改来解决此问题:

browser.wait(function() {
    return viewBookingDetailsPage.totalCostSection.depositDue.getText().then(function(text) {
        return text === '592.00USD';
    });
}, 15000);

我确信这里出了点问题,但它对我有用。如果我有一些空闲时间,我会尝试增强答案并更深入地调查它。

于 2015-09-02T15:56:43.613 回答
0

这篇文章暗示了一个步骤可能被阻止等待完成的事实:http: //makandracards.com/makandra/1709-single-step-and-slow-motion-for-cucumber-scenarios-using-javascript-硒。不确定这是否有帮助。

于 2015-08-31T18:56:24.067 回答