Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/361.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/42.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 在Selenium WebDriverJS中使用getWindowHandles时出错_Javascript_Node.js_Selenium Webdriver - Fatal编程技术网

Javascript 在Selenium WebDriverJS中使用getWindowHandles时出错

Javascript 在Selenium WebDriverJS中使用getWindowHandles时出错,javascript,node.js,selenium-webdriver,Javascript,Node.js,Selenium Webdriver,有一个与此非常相似的问题,问我如何做我想做的事情,但答案对我不起作用。我还没有足够的声誉来评论或要求澄清这一点 我在NodeJS中使用JavaScript和WebDriverJS 我正在尝试切换到一个新窗口,该窗口刚刚打开一个target=\u空白链接 我似乎把问题归结为driver.getWindowHandles()给了我一个错误 修剪节点js文件: var webdriver = require("selenium-webdriver"); var driver = new webdriv

有一个与此非常相似的问题,问我如何做我想做的事情,但答案对我不起作用。我还没有足够的声誉来评论或要求澄清这一点

我在NodeJS中使用JavaScript和WebDriverJS

我正在尝试切换到一个新窗口,该窗口刚刚打开一个target=\u空白链接

我似乎把问题归结为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)
如果我注释掉变量句柄。。。行,然后脚本完成,没有错误,并将文本“google”打印两次到命令提示符。

我找到了

1) 调用是javascript中的getAllWindowHandles。这让我很恼火,为什么每种语言的api对同一事物都有不同的命名方法。 webdriverJS webdriver类的参考:

2) 返回是一个承诺,而不是我想要的实际数组,因此在.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);
});