我刚开始使用NodeJS,正在编写一个UI测试用例。
我一直在阅读许多在线资料,但仍然无法以某种方式弄清楚如何在UI测试用例中使用Promise。
我需要编写一个测试用例(在场景下方)。我不想使用setTimeout
。
在以下情况下,我无法弄清楚如何使用Promise。
var webdriver = require('selenium-webdriver'),By = webdriver.By, until =
webdriver.until;
var driver = new webdriver.Builder().forBrowser('chrome').build();
driver.get('http://www.*********url****');
driver.executeScript("document.getElementById('uid').setAttribute('value', 'u1')");
driver.executeScript("document.getElementById('pwd').setAttribute('value', 'pwd')");
driver.findElement(By.id('page1_login')).click();
driver.findElement(By.id('page2_navigator')).click();
driver.findElement(By.id('page2_my_tasks')).click();
driver.findElement(By.id('page3_create_task')).click();
driver.findElement(By.id('page3_submit_task')).click();
答案 0 :(得分:0)
编辑:在与nikoss讨论时,在Using Promises上发现了MDN的大量资源。如果您以前从未与他们合作过,那么这可能是一个不错的起点。
某些API通过回调处理异步调用,其他API通过返回Promise object,而某些API会同时提供这两个选项。
selenium-webdriver模块使用Promises,可以在here中找到其API文档。至少有几个选择。您可以构建通常称为Promise链的内容,大致如下所示:
var driver = new webdriver.Builder().forBrowser('chrome').build(); // returns Promise
driver
.then(() => driver.get('http://www.*********url****')}) // IMPORTANT: return a Promise to continue the chain
.then(() => driver.executeScript(...)})
.then(() => driver.findElement(By.id('page1_login')).click()})
// ...
.catch((e) => { /** optionally catch errors here **/ });
如果您在Node 7.5或更高版本上运行,则可以使用async functions。结果看起来非常接近您的结果。请注意,您的代码仍需要知道哪些方法返回Promise,并应await
进行Promise解析,然后再继续下一步。
(async function () => {
var driver = await new webdriver.Builder().forBrowser('chrome').build(); // await Promise here
await driver.get('http://www.*********url****');
await driver.executeScript("document.getElementById('uid').setAttribute('value', 'u1')");
await driver.findElement(By.id('page1_login')).click();
// ...
})();
答案 1 :(得分:-1)
您不清楚如何使用Promise,因为这不是Promise专门针对的情况。
首先,您说要使用Promise而不是setTimeout
,这是不可能的,因为setTimeout
是将给事物执行的时间推迟给定毫秒的函数。
Promise是一种在异步调用之后组织代码和链的方法,这只是比相互之间的回调还漂亮,但这是保证不会为您提供某种延迟结构。 还要检出this