【问题标题】:Protractor/Jasmine test browser.isElementPresent not working when looking for a class量角器/茉莉花测试 browser.isElementPresent 在寻找课程时不起作用
【发布时间】:2015-09-24 09:01:22
【问题描述】:

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

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

谁能明白为什么这不起作用?我很茫然。

我正在使用量角器/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);

【问题讨论】:

    标签: javascript selenium jasmine protractor


    【解决方案1】:

    selenium webdriver 不支持与 JQuery 索引相关的选择器,例如 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);
    

    【讨论】:

    • 谢谢!您提出的第 n 个孩子的建议正在发挥作用,并且修改后的 browser.wait 看起来更好看。 :) 作为后续问题,现在当我尝试使用 detailsColumn.getAttribute("InnerHTML");并将其记录到我的控制台我得到 [object Object]。 getText 返回 getText 函数的代码。你不知道我应该怎么做吗? :) 我可以提出一个全新的问题,但我觉得我在向 stackoverflow 发送垃圾邮件......
    • @ShaneNayler 请记住,Protractor/WebDriverJs 中的很多东西都是承诺。如果您需要真正的价值,请解决它们。例如:detailsColumn.getAttribute("InnerHTML").then(function (value) { console.log(value); });。很高兴为您提供帮助!
    猜你喜欢
    • 1970-01-01
    • 2017-05-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-09-28
    • 1970-01-01
    • 1970-01-01
    • 2014-03-31
    相关资源
    最近更新 更多