selenium:导航到页面之前显示的ManagedPromise :: 32 {]:“pending”}消息

我尝试了以下selenium-webdriverJS代码:

var webdriver = require('selenium-webdriver'); var browser = new webdriver.Builder().usingServer().withCapabilities({'browserName': 'chrome' }).build(); browser.get('http://localhost:1091/WebTours/sample.html'); var btn = browser.findElement(webdriver.By.id('show-coordinates')); browser.sleep(3000); var ids = btn.getAttribute("id"); console.log("attributes: " + ids); //expecting to run after above lines. browser.quit(); 

预期:导航到给定的URL,find元素,然后打印属性id ,如下所示:

 attributes: show-coordinates 

实际:在导航到URL本身之前,打印attributes:以下消息:

 attributes: ManagedPromise::32 {[[PromiseStatus]]: "pending"} 

环境:

 Windows 7 - 64 bit selenium-webdriver (installed using `npm install selenium-webdriver`) ChromeDriver Chrome 

您需要从使用then();返回的promise中提取值then();

所有的webdriver命令都会返回一个承诺,作为承诺pipe理器的一部分。 这使您能够编写

 driver.findElement(By.css('#searchBar')).clear(); driver.findElement(By.css('#searchBar')).sendKeys('hello'); driver.findElement(By.css('#searchButton')).click(); 

而不必像这样链接它们:

 driver.findElement(By.css('#searchBar')).clear().then(function() { driver.findElement(By.css('#searchBar')).sendKeys('hello').then(function(){ driver.findElement(By.css('#searchButton')).click(); }); }) 

但是,像许多Webdriver JS命令一样, getAttribute()返回一个值。 在这种情况下,你需要注册一个promisecallback来提取这个值。 所以你的代码变成:

 browser.get('http://localhost:1091/WebTours/sample.html'); var btn = browser.findElement(webdriver.By.id('show-coordinates')); browser.sleep(3000); var ids = btn.getAttribute("id").then(function(promiseResult){ console.log("attribute is: " + promiseResult); }); browser.quit();