如果浏览器仍处于打开状态,请检查Webdriver

时间:2016-04-24 20:36:45

标签: javascript node.js webdriver

我正在使用nodejs和webdriver。它运行一个无限循环,直到我关闭浏览器(这就是想法)。现在问题是如何检测我是否关闭浏览器。这就是我初始化webdriver的方式:

import webdriver from 'selenium-webdriver';
let browser = new webdriver.Builder().usingServer().withCapabilities({
            'browserName': 'chrome',
            'reuse_browser': false
        }).build(); 

对此主题的任何指导都将不胜感激。

2 个答案:

答案 0 :(得分:4)

如果浏览器已关闭,您可以捕获Selenium JavaScript绑定引发的错误:

Error: This driver instance does not have a valid session ID (did you call WebDriver.quit()?) and may no longer be used.

请参阅第402行的selenium-webdriver/lib/webdriver/webdriver.js

function checkHasNotQuit() {
if (!self.session_) {
  throw new error.NoSuchSessionError(
    'This driver instance does not have a valid session ID ' +
    '(did you call WebDriver.quit()?) and may no longer be ' +
    'used.');
 }

浏览器对象上的“session_”变量将仅作为browser.session_提供 - 但是,由于异步性,它可能无法准确显示浏览器是否已关闭。

相反,您可以发送与浏览器的虚拟交互,例如driver.getTitle(),然后捕获错误以检查浏览器是否已关闭:

try{
  driver.getTitle();
  // browser is open
} catch(NoSuchSessionError) {
  // browser is closed
}

答案 1 :(得分:1)

try/catch方法不起作用,因为webdriver函数异步运行。而是使用.then()/.catch()

driver.getCurrentUrl().then(function(link){
    //Browser is open
    resolve(true);
  }).catch(function(){
    //Browser was closed
    resolve(false)
  });

如果您将此代码嵌入到承诺中,您只需resolve即可拥有易于调用的browserExists功能。