在Selenium WebDriverJS中使用getWindowHandles时出错

有一个问题非常类似于如何做我想做的事情,但答案不适合我。 我没有足够的声望评论或要求澄清。

我正在使用JavaScript和WebDriverJS与NodeJS

我试图切换到一个新的窗口,只是打开一个目标= _blank链接。

我似乎已经解决了driver.getWindowHandles()给我一个错误的问题。

修剪Node js文件:

var webdriver = require("selenium-webdriver"); var driver = new webdriver.Builder().usingServer().withCapabilities({'browserName': 'chrome' }).build(); driver.get('https://www.google.com'); driver.getTitle().then(function (title) { console.log(title); var handles = driver.getWindowHandles(); }); driver.getTitle().then(function (title) { console.log(title); }); 

这是我的命令行看起来像:

 C:\selenium>node test2.js Google C:\selenium\node_modules\selenium-webdriver\lib\goog\async\nexttick.js:39 goog.global.setTimeout(function() { throw exception; }, 0); ^ TypeError: undefined is not a function at C:\selenium\test2.js:8:23 at promise.ControlFlow.runInFrame_ (C:\selenium\node_modules\selenium-webdri ver\lib\webdriver\promise.js:1877:20) at promise.Callback_.goog.defineClass.notify (C:\selenium\node_modules\selen ium-webdriver\lib\webdriver\promise.js:2464:25) at promise.Promise.notify_ (C:\selenium\node_modules\selenium-webdriver\lib\ webdriver\promise.js:563:12) at Array.forEach (native) at Object.goog.array.forEach (C:\selenium\node_modules\selenium-webdriver\li b\goog\array\array.js:203:43) at promise.Promise.notifyAll_ (C:\selenium\node_modules\selenium-webdriver\l ib\webdriver\promise.js:552:16) at goog.async.run.processWorkQueue (C:\selenium\node_modules\selenium-webdri ver\lib\goog\async\run.js:125:21) at runMicrotasksCallback (node.js:337:7) at process._tickCallback (node.js:355:11) 

如果我注释掉了var handles … line,那么这个脚本就完成了,没有任何错误,并在命令提示符下输出两次文本“google”。

我想到了!

1)在JavaScript中调用getAllWindowHandles。 它驱使我batty如何每个语言API似乎有不同的命名方法相同的事情。 webdriverJS webdriver类的参考: http ://selenium.googlecode.com/git/docs/api/javascript/class_webdriver_WebDriver.html

2)return是一个promise,而不是我想要的实际数组,所以在.then语句中处理更容易。

打印出来的新代码:Google [打开的窗口名称数组]

 var webdriver = require("selenium-webdriver"); var driver = new webdriver.Builder().usingServer().withCapabilities({'browserName': 'chrome' }).build(); driver.get('https://www.google.com'); driver.getTitle().then(function (title) { console.log(title); driver.getAllWindowHandles().then(function (allhandles) { console.log(allhandles); }); }); driver.getTitle().then(function (title) { console.log(title); });