簡體   English   中英

承諾執行得太早

[英]Promise executes too early

WebDriverJS API說我可以編寫如下代碼:

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);
 //assertEquals("webdriver - Google Search", title);
});

這里的標題是“ Google”。 我可以修改代碼:

driver.get("http://www.google.com");
driver.findElement(By.name("q")).sendKeys("webdriver");
driver.findElement(By.name("btnG")).click().then(function(){
  /*WebDriverWait.until(function() {
    driver.getTitle().then(function(title) {
      console.log(title);
      title = "webdriver - Google Search"
    });
  });*/

  driver.sleep(3000).then(function() {
    driver.getTitle().then(function(title) {
      console.log(title);
    });
  });
});

現在的標題是“ webdriver-Google搜索”。 在頁面有機會加載之前,promise會更改狀態。 此示例來自API文檔,因此可以正常工作。

我看到了一個等待SO的示例但是我不知道將其轉換為WebDriverJS中的工作代碼,API也沒有提及“直到”。

您可以在以下源代碼中查看如何使用“ wait until ”: https : //code.google.com/p/selenium/source/browse/javascript/webdriver/webdriver.js#653

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) {
    console.log(title);
    return title === 'webdriver - Google Search';
  });
}, 1000).then(function() {
  console.log('done!')
});

driver.quit();

給出輸出:

webdriver - Google Search
done!

暫無
暫無

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

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