【问题标题】:Why do I get "NoSuchWindowError" error with "getWindowHandle" when it should return the current window handle?当“getWindowHandle”应该返回当前窗口句柄时,为什么会出现“NoSuchWindowError”错误?
【发布时间】:2015-02-20 15:53:17
【问题描述】:

在 selenium 2 getWindowHandle 中说:

安排一个命令来检索他们当前的窗口句柄。

但是当我尝试对由此返回的句柄做某事时,它会抛出“NoSuchWindowError”。这怎么可能?如果是当前窗口,则不应关闭。如果关闭,则当前窗口是另一个窗口。正确的?

使用:

  • 用于 javascript/node.js 的 Web 驱动程序;
  • Chrome 驱动程序;

更新 2:

看起来像bug。关闭的窗口是 facebook 登录。

复制方法如下:

  • 转到要求登录 facebook 的某个页面;
  • 出现 facebook 登录弹出窗口;
  • 您登录;
  • Facebook 窗口关闭;
  • 现在,如果您尝试获取当前句柄,则会收到此错误。

如提问:

我想获取窗口标题之类的,没关系,我只需要句柄id。

这里是完整的错误堆栈,它不是很有用:

[8.572][SEVERE]: Unable to receive message from renderer
FF

(::) failed steps (::)

NoSuchWindowError: no such window: target window already closed
  at Object.Future.wait (c:\app\node_modules\fibers\future.js:398:15)
  at [object Object]._.extend.update (c:\app\tests\shared\Browser.js:183:62)
  at [object Object].<anonymous> (c:\app\tests\shared\Browser.js:138:18)
  at c:\app\node_modules\fibers\future.js:416:21

    - - - - -
from unknown error: web view not found
  (Session info: chrome=40.0.2214.111)
  (Driver info: chromedriver=2.9.248315,platform=Windows NT 6.1 SP1 x86)
    at new bot.Error (c:\app\node_modules\selenium-webdriver\lib\atoms\error.js:113:18)
    at Object.bot.response.checkResponse (c:\app\node_modules\selenium-webdriver\lib\atoms\response.js:106:9)
    at c:\app\node_modules\selenium-webdriver\lib\webdriver\webdriver.js:362:20
    at c:\app\node_modules\selenium-webdriver\lib\goog\base.js:1582:15
    at [object Object].webdriver.promise.ControlFlow.runInNewFrame_ (c:\app\node_modules\selenium-webdriver\lib\webdriver\promise.js:1654:20)
    at notify (c:\app\node_modules\selenium-webdriver\lib\webdriver\promise.js:465:12)
    at notifyAll (c:\app\node_modules\selenium-webdriver\lib\webdriver\promise.js:442:7)
    at resolve (c:\app\node_modules\selenium-webdriver\lib\webdriver\promise.js:420:7)
    at [object Object].fulfill (c:\app\node_modules\selenium-webdriver\lib\webdriver\promise.js:535:5)
    at c:\app\node_modules\selenium-webdriver\lib\webdriver\promise.js:1520:10
    at c:\app\node_modules\selenium-webdriver\lib\goog\base.js:1582:15
    at [object Object].webdriver.promise.ControlFlow.runInNewFrame_ (c:\app\node_modules\selenium-webdriver\lib\webdriver\promise.js:1654:20)
    at notify (c:\app\node_modules\selenium-webdriver\lib\webdriver\promise.js:465:12)
    at notifyAll (c:\app\node_modules\selenium-webdriver\lib\webdriver\promise.js:442:7)
    at resolve (c:\app\node_modules\selenium-webdriver\lib\webdriver\promise.js:420:7)
    at fulfill (c:\app\node_modules\selenium-webdriver\lib\webdriver\promise.js:535:5)
    at c:\app\node_modules\selenium-webdriver\lib\goog\base.js:1582:15
    at [object Object].webdriver.promise.ControlFlow.runInNewFrame_ (c:\app\node_modules\selenium-webdriver\lib\webdriver\promise.js:1654:20)
    at notify (c:\app\node_modules\selenium-webdriver\lib\webdriver\promise.js:465:12)
    at notifyAll (c:\app\node_modules\selenium-webdriver\lib\webdriver\promise.js:442:7)
    at resolve (c:\app\node_modules\selenium-webdriver\lib\webdriver\promise.js:420:7)
    at [object Object].fulfill (c:\app\node_modules\selenium-webdriver\lib\webdriver\promise.js:535:5)
    at c:\app\node_modules\selenium-webdriver\lib\webdriver\promise.js:721:49
    at c:\app\node_modules\selenium-webdriver\lib\webdriver\http\http.js:96:5
    at IncomingMessage.<anonymous> (c:\app\node_modules\selenium-webdriver\http\index.js:131:7)
    at IncomingMessage.emit (events.js:117:20)
    at _stream_readable.js:943:16
    at process._tickDomainCallback (node.js:463:13)
==== async task ====
WebDriver.getWindowHandle()
    at [object Object].webdriver.WebDriver.schedule (c:\app\node_modules\selenium-webdriver\lib\webdriver\webdriver.js:345:15)
    at [object Object].webdriver.WebDriver.getWindowHandle (c:\app\node_modules\selenium-webdriver\lib\webdriver\webdriver.js:672:15)
    at [object Object].<anonymous> (c:\app\tests\shared\Browser.js:23:12)
    at [object Object].fn [as f_getWindowHandle] (c:\app\node_modules\fibers\future.js:89:26)
    at [object Object]._.extend.update (c:\app\tests\shared\Browser.js:183:42)
    at [object Object].<anonymous> (c:\app\tests\shared\Browser.js:138:18)
    at c:\app\node_modules\fibers\future.js:416:21

【问题讨论】:

  • 举一个例子,说明你想用句柄和错误回溯做什么。谢谢。
  • 我刚刚更新了问题(:谢谢
  • 您是在尝试使用 FireFox selenium IDE,还是可以访问支持 selenium 的编程语言?
  • 不,我正在使用原始 node.js/javascript webdriver 和 chromedriver。

标签: node.js selenium selenium-webdriver


【解决方案1】:

试试

var webdriver = require('selenium-webdriver');
var driver = new webdriver.Builder().forBrowser('chrome').build();

然后您会看到 chrome 已打开,不要关闭它。那就试试吧

driver.get('http://www.google.com')

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-02-23
    • 2021-08-01
    • 1970-01-01
    • 1970-01-01
    • 2017-06-19
    • 2010-09-13
    • 1970-01-01
    相关资源
    最近更新 更多