我正在使用nodejs和webdriver。它运行一个无限循环,直到我关闭浏览器(这就是想法)。现在问题是如何检测我是否关闭浏览器。这就是我初始化webdriver的方式:
import webdriver from 'selenium-webdriver';
let browser = new webdriver.Builder().usingServer().withCapabilities({
'browserName': 'chrome',
'reuse_browser': false
}).build();
对此主题的任何指导都将不胜感激。
答案 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
功能。