Protractor/Jasmine 测试 browser.isElementPresent 在寻找 class 时不起作用

Protractor/Jasmine test browser.isElementPresent not working when looking for a class

所以我正在尝试 运行 对 jasmine 进行一些测试,但我对整个事情还很陌生。我花了比我愿意承认的更多的时间来尝试弄清楚为什么我的 webdriver 在它有机会检查 '.detailsColumn' 元素以获得预期结果之前关闭浏览器。一段时间后,我发现我可以使用 browser.wait 让浏览器保持活动状态足够长的时间,以便元素准备就绪。

我最新的测试版本如下。我得到的错误是 invalidSelectorError 并且没有关于错误发生在哪一行的信息。不过,我猜测 invalidSelectorError 指向我的声明或 detailsColumn 变量的使用。

谁能看出为什么这行不通?我很茫然。

我正在使用 protractor/jasmine 进行测试,并为我的网络驱动程序使用 selenium。

it('Should display result summary correctly when searching for multiple articles only', function () {
    var TrackID= ExpectedArticle1Details.TrackingID + ', ' + ExpectedArticle2Details.TrackingID;

    landingPage.get();
    landingPage.setTrackID(TrackID)
    landingPage.clickTrackButton();
    expect(resultPage.allElementsofLandingPageAreVisible()).toEqual(true);
    expect(resultPage.allHeadersofResultsPageAreVisible()).toEqual(true);

    browser.wait(function () {
        var detailsColumn = protractor.By.css('.detailsColumn.status:eq(0)');
         return browser.isElementPresent(detailsColumn).then(function (result) {
           expect(result).toBe(true);
           return result;
           console.log(result);
         });
       }, 10000);

JQuery selenium webdriver 不支持与索引相关的选择器,例如 eq()

您可能想改用 nth-child

.detailsColumn.status:nth-child(1)

或者,您甚至可以将其替换为 element.all() 加上 first():

element.all(by.css(".detailsColumn.status")).first();

此外,如果您必须使用 browser.wait(),我认为您可以将当前拥有的整个 browser.wait() 块替换为:

var EC = protractor.ExpectedConditions;
var detailsColumn = element(by.css('.detailsColumn.status:nth-child(1)'));
browser.wait(EC.presenceOf(detailsColumn), 10000);