使用JS中的promise编写测试用例

时间:2018-08-24 16:40:20

标签: javascript node.js promise

我刚开始使用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();

2 个答案:

答案 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