Javascript Selenium-Driver.quit()生成一个;未经处理的PromiserEjectionWarning:无此会话错误“;关闭webdriver后
我在Node中使用express制作了一个API。该API有一个端点,当调用该端点时,它会执行一个方法来启动SeleniumWebDriver实例并在网页中填充表单。在该方法结束时,我尝试执行driver.quit()关闭webdriver,但不管怎样,我都会得到相同的错误:Javascript Selenium-Driver.quit()生成一个;未经处理的PromiserEjectionWarning:无此会话错误“;关闭webdriver后,javascript,node.js,selenium,selenium-webdriver,Javascript,Node.js,Selenium,Selenium Webdriver,我在Node中使用express制作了一个API。该API有一个端点,当调用该端点时,它会执行一个方法来启动SeleniumWebDriver实例并在网页中填充表单。在该方法结束时,我尝试执行driver.quit()关闭webdriver,但不管怎样,我都会得到相同的错误: (node:18608) UnhandledPromiseRejectionWarning: NoSuchSessionError: Tried to run command without establishing a
(node:18608) UnhandledPromiseRejectionWarning: NoSuchSessionError: Tried to run command without establishing a connection
at Object.throwDecodedError (D:\bot\node_modules\selenium-webdriver\lib\error.js:517:15)
at parseHttpResponse (D:\bot\node_modules\selenium-webdriver\lib\http.js:655:13)
at Executor.execute (D:\bot\node_modules\selenium-webdriver\lib\http.js:581:28)
at processTicksAndRejections (internal/process/task_queues.js:93:5)
at async thenableWebDriverProxy.execute (D:\bot\node_modules\selenium-webdriver\lib\webdriver.js:724:17)
at async thenableWebDriverProxy.findElements (D:\bot\node_modules\selenium-webdriver\lib\webdriver.js:1020:17)
(Use `node --trace-warnings ...` to show where the warning was created)
环境
- 视窗10
- 节点v14.7.0
- selenium webdriver:4.0.0-alpha.8
- 快递:4.17.1
- geckodriver的最新版本(0.29.0)
- Firefox的最新版本(85.0)
let driver;
module.exports.bot = async function(user, password, var_a, var_b) {
try {
await (driver = new Builder().forBrowser('firefox').setFirefoxOptions(options).build());
logger("Starting...");
// Go to main page
await driver.get("https://www.example.com");
// Find the dropdown and hover it
await hoverDropdown();
const button = await driver.findElement(By.id("j_idt8:j_idt18"));
await button.click();
await login(user, password);
logger("Logged in successfuly");
await fillForm(var_a, var_b);
logger("Finishing...");
} catch (error) {
throw error;
} finally {
if (driver)
await driver.quit();
}
};
在该方法完成执行(执行driver.quit之后的事件)后,节点崩溃,并显示UnhandledPromisejectionWarning
我该怎么办?谁能帮我一把吗?我发现了错误。我将发布它,以防有人偶然发现相同(或类似)的问题 事实证明,我在代码中错误地使用了selenium的“wait”方法。文档中说“等待将反复评估条件,直到返回真实值” 由于我的语法错误,wait方法从未超时,因此它一直在循环。。。即使在执行driver.quit()之后 这就是为什么崩溃节点的错误有这条线。它试图找到元素
at async thenableWebDriverProxy.findElements (D:\bot\node_modules\selenium-webdriver\lib\webdriver.js:1020:17)
语法错误:
await driver.wait(until.elementLocated(By.id("msgError"), 1000));
await driver.wait(until.elementLocated(By.id("msgError")), 1000);
正确语法:
await driver.wait(until.elementLocated(By.id("msgError"), 1000));
await driver.wait(until.elementLocated(By.id("msgError")), 1000);
同样重要的是要注意,此方法会引发异常(超时异常),因此您也必须尝试捕获它。您将获得哪一行error@PDHide嗯,我真的不知道。执行完所有操作后,错误就会弹出。即使在express返回API调用响应之后。正如您在OP中所看到的,显示的消息并没有指明它发生在我的代码的哪一行(它显示了SeleniumWebDriver内部的几行代码)。您可以尝试删除throw error命令吗?