首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Selenium WebDriverJS中使用WebDriverJS时出错

在Selenium WebDriverJS中使用WebDriverJS时出错
EN

Stack Overflow用户
提问于 2015-05-08 01:09:30
回答 1查看 2.5K关注 0票数 2

有一个非常类似的问题,问我如何做我想做的事,但答案不是对我有用。我还没有足够的声誉对此发表评论或要求澄清。

我正在使用JavaScript和WebDriverJS与NodeJS

我试图切换到一个新的窗口,它刚刚打开了一个target=_blank链接。

我似乎把这个问题归结为driver.getWindowHandles()给了我一个错误。

剪裁节点js文件:

代码语言:javascript
复制
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);
});

这就是我的命令行的样子:

代码语言:javascript
复制
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句柄..。然后,脚本在没有错误的情况下完成,并将文本"google“打印两次到命令提示符。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-05-08 01:43:14

我想出来了!

1)调用是javascript中的getAllWindowHandles。这让我很惊讶,对于同一件事,每种语言api似乎都有不同的命名方法。webdriverJS for驱动程序类的引用:WebDriver.html

2)返回是一种承诺,而不是我想要的实际数组,因此在.then语句中更容易处理。

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

代码语言:javascript
复制
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);
});
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30114201

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档