Typescript 在量角器中单击复选框时出错
我正在尝试单击量角器中ng repeater中的一个复选框,以查看下面的html 我使用的代码是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();
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中看到复选框,那么在中继器上没有返回任何元素的情况下可能是什么?