【问题标题】:Error clicking checkbox in protractor单击量角器中的复选框时出错
【发布时间】:2017-02-20 16:56:36
【问题描述】:

我正在尝试单击量角器中 ng-repeater 中的一个复选框以跟踪 html

我使用的代码是;

element.all(by.repeater('user in siteUsers | filter: { SiteId: site.SiteId }'))
            .then(function (ElementArray) {
                ElementArray[0].all(by.tagName('input')).get(0).click();
            }).catch((err) => {
                console.log(err);
            });

但我收到以下错误:

TypeError: Cannot read property 'all' of undefined
    at C:\AGLRepository\Agl.Digital.SolarCommand.WebApi\e2eTests\src\components\settings\addRemoveUsers\addRemoveUsers.page.ts:87:32
    at ManagedPromise.invokeCallback_ (C:\Users\MyDevMachine\AppData\Roaming\npm\node_modules\protractor\node_modules\selenium-webdriver\lib\promise.js:1379:14)
    at TaskQueue.execute_ (C:\Users\MyDevMachine\AppData\Roaming\npm\node_modules\protractor\node_modules\selenium-webdriver\lib\promise.js:2913:14)
    at TaskQueue.executeNext_ (C:\Users\MyDevMachine\AppData\Roaming\npm\node_modules\protractor\node_modules\selenium-webdriver\lib\promise.js:2896:21)

我还提到了以下链接解决方案。不过运气不好。

提前致谢。

enter link description here

【问题讨论】:

    标签: typescript protractor


    【解决方案1】:

    您错误地使用了.all()。从官方文档中查看以下摘录

    element.all(locator).all(locator) 查看代码 ElementArrayFinder.prototype.all

    对 ElementArrayFinder 的调用可能会被链接起来以查找 使用此 ElementArrayFinder 中的当前元素作为 初始点。此函数返回一个新的 ElementArrayFinder 将包含找到的子元素(也可能为空)。

    你正在使用这个 - ElementArray[0].all(by.tagName('input')).get(0).click() 正确用法 - ElementArray.all(by.tagName('input')).get(0).click()

    以及有关最佳做法的其他信息。你不需要解决element.all() 的承诺。您可以执行以下操作

    element.all(by.repeater('blah in blahs')).all(by.tagName('input')).get(0).click()

    【讨论】:

    • ElementArray[0].all(by.tagName('input')).get(0).click() 应该可以正常工作。这里的问题是定位器by.repeater('user in siteUsers | filter: { SiteId: site.SiteId }') 没有返回任何元素。因此 ElementArray 将为空且 ElementArray[0] 将未定义。可能会添加一些等待来解决问题。
    • @AdityaReddy 我试过这段代码element.all(by.repeater('user in siteUsers | filter: { SiteId: site.SiteId }')).all(by.tagName('input')).get(0).click(); 然后我得到了错误Failed: Index out of bound. Trying to access element at index: 0, but there are only 0 elements that match locator By(css selector, input) 在用户界面上我可以看到复选框,但看不到点击事件。 Wgat 可能是原因?
    • @Sudharsan Selvaraj,我在代码前申请了browser.wait(() => 1000); 。但没有帮助。
    • @SudharsanSelvaraj .. 你是对的 .. all() 也可以应用于元素。 @ OP 是的,您看到的错误是因为没有根据转发器值返回任何元素
    • 如果我可以在 UI 中看到复选框,可能是什么情况下没有看到转发器上返回的任何元素?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-11-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-06
    • 2021-02-21
    • 2014-07-08
    相关资源
    最近更新 更多