gpt4 book ai didi

javascript - 在 Selenium WebDriverJS 中使用 getWindowHandles 时出错

转载 作者:搜寻专家 更新时间:2023-11-01 00:42:24 24 4
gpt4 key购买 nike

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

我在 NodeJS 中使用 JavaScript 和 WebDriverJS

我正在尝试切换到刚刚打开的带有 target=_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... 行,那么脚本将无误地完成,并将文本“google”打印两次到命令提示符。

最佳答案

我想通了!

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);
});

关于javascript - 在 Selenium WebDriverJS 中使用 getWindowHandles 时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30114201/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com