Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/362.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
Javascript 量角器>;TypeError:item.element不是函数_Javascript_Automation_Protractor_Automated Tests - Fatal编程技术网

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)
,如果