Javascript 量角器>;TypeError:item.element不是函数
我正在做一个关于量角器的电子商务项目,我不能诚实地找出它到底出了什么问题。我犯了以下错误Javascript 量角器>;TypeError:item.element不是函数,javascript,automation,protractor,automated-tests,Javascript,Automation,Protractor,Automated Tests,我正在做一个关于量角器的电子商务项目,我不能诚实地找出它到底出了什么问题。我犯了以下错误 Failed: item.element is not a function[0m Stack: TypeError: item.element is not a function 最后一天我一直在努力工作,但控制台不清楚具体的问题。因为我已经检查过了,看不到问题 问题:这是什么?如何解决此问题? 课程中的代码乱七八糟,所以我会帮你整理一下 代码 描述('电子商务角度项目',功能(){ 来自控
Failed: item.element is not a function[0m
Stack:
TypeError: item.element is not a function
最后一天我一直在努力工作,但控制台不清楚具体的问题。因为我已经检查过了,看不到问题
问题:这是什么?如何解决此问题?
课程中的代码乱七八糟,所以我会帮你整理一下
代码
描述('电子商务角度项目',功能(){
来自控制台的消息
(请注意,此规范文件中存在IT案例,它们只通过了一次,因此忽略这些消息,但当IT场景出现时,情况非常糟糕)
(节点:10145)[DEP0022]弃用警告:os.tmpDir()已弃用。请改用os.tmpDir()。
[16:34:32]I/launcher-运行WebDriver的1个实例
[16:34:32]I/hosted-使用位于的selenium服务器http://localhost:4444/wd/hub
起动
[16:34:36]W/element-通过(css选择器,*[name=“name”])为定位器找到多个元素-将使用第一个结果
×
成功!表单已成功提交!。
[16:34:37]W/element-通过(css选择器,*[name=“name”])为定位器找到多个元素-将使用第一个结果
[16:34:37]W/element-通过(css选择器,*[name=“name”])为定位器找到多个元素-将使用第一个结果
名称应至少包含2个字符
[31mF[0m
失败:
1) 电子商务项目客户注册
信息:
[31m失败:item.element不是函数[0m
堆栈:
TypeError:item.element不是函数
at/Users/xxx/Documents/JSworkspace/LocatorTraining/ecommerceAutomation.js:10:12
在ManagedPromise.invokeCallback上(/Users/xxx/Documents/JSworkspace/LocatorTraining/dragrator/node_modules/selenium webdriver/lib/promise.js:1376:14)
在TaskQueue.execute处(/Users/xxx/Documents/JSworkspace/LocatorTraining/dragrator/node_modules/selenium webdriver/lib/promise.js:3084:14)
位于TaskQueue.executeNext(/Users/xxx/Documents/JSworkspace/LocatorTraining/dragrator/node_modules/selenium webdriver/lib/promise.js:3067:27)
异步运行时(/Users/xxx/Documents/JSworkspace/LocatorTraining/graptor/node_modules/selenium webdriver/lib/promise.js:2927:27)
at/Users/xxx/Documents/JSworkspace/LocatorTraining/dragotor/node_modules/selenium webdriver/lib/promise.js:668:7
在
在进程中。_tick回调(内部/process/next_tick.js:188:7)
发件人:任务:在控制流中运行它(“客户注册”)
在UserContext中。(/Users/xxx/Documents/JSworkspace/LocatorTraining/dragrator/node_modules/jasminewd2/index.js:94:19)
从异步测试:
错误
在套件中。(/Users/xxx/Documents/JSworkspace/LocatorTraining/ecommerceAutomation.js:27:2)
at对象。(/Users/xxx/Documents/JSworkspace/LocatorTraining/ecommerceAutomation.js:1:63)
编译(Module.js:652:30)
在Object.Module.\u extensions..js(Module.js:663:10)
在Module.load(Module.js:565:32)
在tryModuleLoad时(module.js:505:12)
1个规格,1个故障
以3.801秒完成
[16:34:38]I/launcher-WebDriver的0个实例仍在运行
[16:34:38]I/launcher-chrome#01未通过1次测试
[16:34:38]I/launcher-总体:1个规格失败
[16:34:38]E/launcher-进程已退出,错误代码为1
元素。all()
返回ElementArrayFinder
,您可以将其视为元素数组。因此then()
中的项
表示数组,而不是单个元素
element.all(by.tagName("app-card")).then(function (item) {
item.element(...)
...
})
不能对数组对象调用.element()
。但可以对单个元素调用.element()
,如下所示:
element.all(by.tagName("app-card")).then(function (items) {
items[0].element(...) // items[0] is single element.
...
})
function selectItem(product) {
//chain the locators so that you can pick a specific item regardless of where it is located
element.all(by.tagName("app-card")).filter(function(item){
return item.element(by.css("h4 a")).getText().then(function(txt){
return txt === product;
});
}).then(function(items){
if(items.length > 0) {
items[0].element(by.css("button[class*='btn-info']")).click();
}
else {
console.error('Not find product: ' + product);
}
}).catch(function(err){
console.error(err);
});
}
对于您的情况,功能selectItem
应更改如下:
element.all(by.tagName("app-card")).then(function (items) {
items[0].element(...) // items[0] is single element.
...
})
function selectItem(product) {
//chain the locators so that you can pick a specific item regardless of where it is located
element.all(by.tagName("app-card")).filter(function(item){
return item.element(by.css("h4 a")).getText().then(function(txt){
return txt === product;
});
}).then(function(items){
if(items.length > 0) {
items[0].element(by.css("button[class*='btn-info']")).click();
}
else {
console.error('Not find product: ' + product);
}
}).catch(function(err){
console.error(err);
});
}
element.all()
element.all(by.tagName("app-card")).then(function (item) {
item.element(...)
...
})
不能对数组对象调用.element()
。但可以对单个元素调用.element()
,如下所示:
element.all(by.tagName("app-card")).then(function (items) {
items[0].element(...) // items[0] is single element.
...
})
function selectItem(product) {
//chain the locators so that you can pick a specific item regardless of where it is located
element.all(by.tagName("app-card")).filter(function(item){
return item.element(by.css("h4 a")).getText().then(function(txt){
return txt === product;
});
}).then(function(items){
if(items.length > 0) {
items[0].element(by.css("button[class*='btn-info']")).click();
}
else {
console.error('Not find product: ' + product);
}
}).catch(function(err){
console.error(err);
});
}
对于您的情况,功能selectItem
应更改如下:
element.all(by.tagName("app-card")).then(function (items) {
items[0].element(...) // items[0] is single element.
...
})
function selectItem(product) {
//chain the locators so that you can pick a specific item regardless of where it is located
element.all(by.tagName("app-card")).filter(function(item){
return item.element(by.css("h4 a")).getText().then(function(txt){
return txt === product;
});
}).then(function(items){
if(items.length > 0) {
items[0].element(by.css("button[class*='btn-info']")).click();
}
else {
console.error('Not find product: ' + product);
}
}).catch(function(err){
console.error(err);
});
}
你有没有console.log(item)
和console.log(item.element)
,如果你确实共享了日志。很明显,你试图调用函数element
,它不是一个函数。比如var data=10;
然后调用data();
这会给我同样的错误。不,我不能调用console.log(项目)。我不认为代码得到了那么多。我不确定您在这里试图实现什么element.all(by.tagName(“app card”))。然后(function(item){}
。如果您想获得具有text==“Samsung Note 8”
的所有元素,那么您缺少过滤器。因此您将拥有element.all(by.tagName(“app card”)).filter(function(by.tagName)(“app card”)).filter(功能(项目){return item.element(by.css(“h4 a”)).gettext().then(function(text){return text==“Samsung Note 8”})
。它会返回满足此要求的元素数组。但是如果您只查找一个项目,为什么不使用元素(by.tagName(“app card”).element(by.cssContainingText(“h4 a”,“Samsung Note 8”))
@SergeyPleshakov非常感谢。Sergy我完全同意当我阅读课程材料时,我不明白为什么我们为什么三星仍在“功能”中,我也认为这应该保持空白,以便为阵列中使用其他项目的可能性打下基础。但Yong善意地为我和我提供了答案我尝试了他的代码,它工作得很好。我将对这段代码进行反向工程,并在将来使用它。您是否console.log(item)
和console.log(item.element)
,如果