有一个问题与此问题非常类似,询问如何做我想做的事,但答案对我不起作用。我没有足够的声誉来发表评论或要求澄清。
我正在使用JavaScript和WebDriverJS与NodeJS
我正在尝试切换到刚刚使用target = _blank链接打开的新窗口。
我似乎把问题归结为driver.getWindowHandles()给我一个错误。
修剪节点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 handle ...行,那么脚本完成后没有错误并打印文本" google"两次到命令提示符。
答案 0 :(得分:3)
我明白了!
1)调用是javascript中的getAllWindowHandles。它让我觉得每个语言api似乎都有不同的命名方法。 webdriverJS webdriver类的参考: http://selenium.googlecode.com/git/docs/api/javascript/class_webdriver_WebDriver.html
2)返回是一个promise,而不是我想要的实际数组,因此在.then语句中处理更容易。
打印出来的新代码: 谷歌 [打开窗口名称数组] 谷歌
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);
});