EJS*_*EJS 0 javascript selenium return promise
我正在使用 Selenium 和 JavaScript 编写测试。我对两者都是新手,对函数式编程和 promise 也是新手。我正在尝试创建一个需要做 3 件事的函数:
我当前的功能不起作用:
var clearAndSendKeys = function(driver, elementIdentifier, sendKeys) {
var returnValue;
driver.findElement(elementIdentifier).then(function(inputField){
inputField.click().then(function() {
inputField.clear().then(function() {
returnValue = inputField.sendKeys(sendKeys);
});
});
});
return returnValue;
}
Run Code Online (Sandbox Code Playgroud)
然后将调用该函数,例如:
clearAndSendKeys(driver, webdriver.By.id('date_field'), '14.09.2015').then(function(){
//Do stuff
});
Run Code Online (Sandbox Code Playgroud)
我希望变量returnValue包含来自sendKeys. 但是,该函数clearAndSendKeys在运行 sendKeys 之前返回未定义的变量。我认为这是因为returnValue从未定义为承诺,因此程序不知道它需要等待sendKeys.
我怎样才能让我的函数clearAndSendKeys从 返回承诺sendKeys?我宁愿避免向clearAndSendKeys函数添加回调。
编辑:.then({return data})从代码中删除,因为这是一个错字。
您必须从.then回调中返回每个承诺:
var clearAndSendKeys = function(driver, elementIdentifier, sendKeys) {
return driver.findElement(elementIdentifier).then(function(inputField){
return inputField.click().then(function() {
return inputField.clear().then(function() {
return inputField.sendKeys(sendKeys);
});
});
});
}
Run Code Online (Sandbox Code Playgroud)
返回的承诺 .then将解析为与回调返回的值相同的值。
请参阅为什么我的变量在函数内部修改后未更改?-关于为什么您当前的代码不起作用的异步代码参考。Promise 是异步的。
| 归档时间: |
|
| 查看次数: |
2327 次 |
| 最近记录: |