Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typescript/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Typescript 在量角器中单击复选框时出错_Typescript_Protractor - Fatal编程技术网

Typescript 在量角器中单击复选框时出错

Typescript 在量角器中单击复选框时出错,typescript,protractor,Typescript,Protractor,我正在尝试单击量角器中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();

我正在尝试单击量角器中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)
此外,我还提到了以下链接解决方案。不过运气不好

提前谢谢

您使用的
.all()
不正确。查看以下官方文档摘录

元素.all(定位器).all(定位器)视图代码 ElementArrayFinder.prototype.all

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

您正在使用此-
ElementArray[0]。全部(按.tagName('input'))。获取(0)。单击()
正确用法-
ElementArray.all(按.tagName('input')).get(0)。单击()

以及关于最佳做法的其他信息。您不需要解析
元素.all()
的承诺。你可以像下面这样做

element.all(按.repeater('blah in blahs')).all(按.tagName('input')).get(0)。单击()

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

元素.all(定位器).all(定位器)视图代码 ElementArrayFinder.prototype.all

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

您正在使用此-
ElementArray[0]。全部(按.tagName('input'))。获取(0)。单击()
正确用法-
ElementArray.all(按.tagName('input')).get(0)。单击()

以及关于最佳做法的其他信息。您不需要解析
元素.all()
的承诺。你可以像下面这样做


element.all(by.repeater('blah in blahs')).all(by.tagName('input')).get(0)。单击()

ElementArray[0]。all(by.tagName('input')).get(0)。单击()
应该可以正常工作。这里的问题是.repeater('user in siteUsers | filter:{SiteId:site.SiteId}')
没有为定位器
返回任何元素。因此ElementArray将为空,ElementArray[0]将未定义。可能正在添加一些等待将解决此问题。@AdityaReddy我尝试了此代码
元素.all(by.repeater('user-in-siteUsers | filter:{SiteId:site.SiteId}')).all(by.tagName('input')).get(0)。单击()然后我得到的错误是
失败:索引超出范围。试图访问索引为0的元素,但只有0个元素与定位器匹配(css选择器,输入)
在UI上,我可以看到复选框,但看不到单击事件。Wgat可能是原因吗?@Sudharsan Selvaraj,我应用了
browser.wait(()=>1000)在代码之前。但是没有帮助。@Sudharsansevaraj。。你是对的。。all()也可以应用于元素。@OP yes,您看到的错误是因为没有基于中继器值返回任何元素。如果我能看到UI中的复选框,那么在中继器上没有返回任何元素的可能情况是什么?
ElementArray[0]。all(by.tagName('input')).get(0)。click()
应该可以正常工作。这里的问题是.repeater('user in siteUsers | filter:{SiteId:site.SiteId}')
没有为定位器
返回任何元素。因此ElementArray将为空,ElementArray[0]将未定义。可能正在添加一些等待将解决此问题。@AdityaReddy我尝试了此代码
元素.all(by.repeater('user-in-siteUsers | filter:{SiteId:site.SiteId}')).all(by.tagName('input')).get(0)。单击()然后我得到的错误是
失败:索引超出范围。试图访问索引为0的元素,但只有0个元素与定位器匹配(css选择器,输入)
在UI上,我可以看到复选框,但看不到单击事件。Wgat可能是原因吗?@Sudharsan Selvaraj,我应用了
browser.wait(()=>1000)在代码之前。但是没有帮助。@Sudharsansevaraj。。你是对的。。all()也可以应用于元素。@OP yes,您看到的错误是因为没有基于中继器值返回元素如果我可以在UI中看到复选框,那么在中继器上没有返回任何元素的情况下可能是什么?