一尘不染

预期:未获得实际值

jenkins

我面临一个非常奇怪的问题。我有一套每天在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()块中。现在奇怪的是:

当我执行测试时,使用第一个assert块进行的测试就很好了,而在第二个测试块上,它说了assert失败了(我做了一些事情以更改值),但是手动/本地我发现一切都很好。同样在执行测试时,我看到值正在更改(我什至没有截屏并检查浏览器堆栈上的可视日志)。在第三个it块中,我执行了其他操作,然后再次断言失败,但是将其与我从第2步(而不是第1步)获得的值进行比较!因此,由于某种原因,我似乎落后了一步…如果我评论它受阻或只是在第一个测试中主张,第二个就可以通过,但第三个失败。如果我评论2它阻止,则第三次可以通过。

在这种特殊情况下,由于某种原因听起来有些神奇,并且仅在Jenkins上并且仅在Browserstack上发生。顺便说一句,测试已经运行了一段时间没有任何问题,并且没有任何更新就开始失败。

尽管由于某种原因我在控制流方面遇到问题,但我等待其他元素的出现,我也尝试使用browser.sleep()反模式来对其进行更好的研究,但它仍然处于落后地位。

我不是在直接寻找特定的解决方案,但是任何建议将不胜感激,我不确定应该提供哪些其他信息,希望我已经足够描述问题了。

@ protractor2.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');
    });

阅读 213

收藏
2020-07-25

共1个答案

一尘不染

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

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

我确定这里有些问题,但是对我有用。如果我有空闲时间,我将尝试增强答案并进行更深入的研究。

2020-07-25