簡體   English   中英

什么時候(什么時候沒有)等待硒webdriverjs完成?

[英]When (and when not) to wait for completion in selenium webdriverjs?

有人可以詳細解釋一下,為什么硒webdriverjs中的“某些”操作需要等待異步函數返回而其他人不需要?

在官方示例中, driver.get('http://www.google.com')在使用driver.findElement之前不使用諾言等待完成,但是在檢索標題時, driver.getTitle()在比較之前使用諾言。

var webdriver = require('selenium-webdriver');

var driver = new webdriver.Builder().
   withCapabilities(webdriver.Capabilities.chrome()).
   build();

driver.get('http://www.google.com');
driver.findElement(webdriver.By.name('q')).sendKeys('webdriver');
driver.findElement(webdriver.By.name('btnG')).click();
driver.wait(function() {
 return driver.getTitle().then(function(title) {
   return title === 'webdriver - Google Search';
 });
}, 1000);

driver.quit();

該文檔解釋了“ 控制流”部分中發生的情況。

在幕后,所有的承諾,即使您不需要自己處理。 如果沒有特別告訴WebDriverJS,則有一個Promise Manager處理指令,以便在許多情況下為您處理Promise。 文檔提供了此示例。 如果您給出以下指示:

driver.get(“http://www.google.com”);
driver.findElement(webdriver.By.name('q')).sendKeys('webdriver');
driver.findElement(webdriver.By.name('btnG')).click();
driver.getTitle().then(function(title) {
  console.log(title);
});

承諾管理器將它們編織成這樣:

driver.get(“http://www.google.com”).
then(function() {
  return driver.findElement(webdriver.By.name('q'));
}).
then(function(q) {
  return q.sendKeys('webdriver');
}).
then(function() {
  return driver.findElement(webdriver.By.name('btnG'));
}).
then(function(btnG) {
  return btnG.click();
}).
then(function() {
  return driver.getTitle();
}).
then(function(title) {
  console.log(title);
});

您需要處理getTitle返回的諾言的原因是console.log不是WebDriverJS函數,因此不參與諾言管理。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM