gpt4 book ai didi

node.js - Selenium webdriver 错误 : ECONNREFUSED connect ECONNREFUSED 127. 0.0.1:9515

转载 作者:太空宇宙 更新时间:2023-11-03 22:57:53 27 4
gpt4 key购买 nike

我在我的电子桌面应用程序中使用 NodeJS selenium。

"electron-chromedriver": "^4.0.0-beta.1",
"selenium-webdriver": "^4.0.0-alpha.1",

我关注了electron documentation about using selenium在电子应用程序中,我有这样的代码:

let chromeCapabilities = webdriver.Capabilities.chrome();
let chromeOptions = { 'args': ['--disable-infobars'] };
chromeCapabilities.set('chromeOptions', chromeOptions);
capabilities.setPageLoadStrategy('eager');

this.driver = new webdriver.Builder()
.withCapabilities(chromeCapabilities)
.usingServer('http://localhost:9515')
.forBrowser('chrome')
.build();

在上面的代码之后有一系列的 promise ,它们正在做许多不同的事情。

除了我在 ./node_modules/.bin/ 目录中的终端中运行 chromedriver 命令。

Starting ChromeDriver 69.0.3497.106 (857b284701ddf7bef0f14fa76416cf7ca786b411) on port 9515
Only local connections are allowed.

现在,当我运行整个代码时,它有时可以正常工作,但偶尔会在我 npm run dev 电子应用程序的终端中打印错误:

Error: ECONNREFUSED connect ECONNREFUSED 127.0.0.1:9515

我读了几个类似的问题,但没有一个有帮助。我真的不明白为什么某些代码有时可以工作,有时会导致错误。

在出现错误后,我还检查了端口 9515 (chromedriver) 和 9080 (electron nodeJS),一切看起来都很好:

alt

<小时/>

我做了一些更多的调试,我发现可能是这样的:

webElement.getAttribute('style')

有时导致了我的错误。当我删除上面(当然还有 .then().catch 之后)错误停止发生。但是我不知道获取 webElement 的内联样式可能与连接被拒绝错误有关。

最佳答案

您已使用以下功能:

capabilities.setPageLoadStrategy('eager');

之前,在几个 QA 中,我们已经将 PageLoadStrategy 讨论为 eager,适用于 ChromeDriver>Chrome:

结论是,根据WebDriver Status您将根据 WebDriver Specification 中的内容在 ChromeDriver 中找到所有 WebDriver 命令及其当前支持的列表。 。一旦各个方面都完成PageLoadStrategy.EAGER 就一定会在 Chrome 驱动程序中发挥作用。

bugs.chromium.orggroups.google.com 内的多个线程也进行了类似的讨论,如下所示:

如果你看page_load_strategy.cc PageLoadStrategyeager 尚未实现:

#include "chrome/test/chromedriver/chrome/page_load_strategy.h"
#include "base/logging.h"
#include "chrome/test/chromedriver/chrome/navigation_tracker.h"
#include "chrome/test/chromedriver/chrome/non_blocking_navigation_tracker.h"
const char PageLoadStrategy::kNormal[] = "normal";
const char PageLoadStrategy::kNone[] = "none";
const char PageLoadStrategy::kEager[] = "eager";
PageLoadStrategy* PageLoadStrategy::Create(
std::string strategy,
DevToolsClient* client,
const BrowserInfo* browser_info,
const JavaScriptDialogManager* dialog_manager) {
if (strategy == kNone) {
return new NonBlockingNavigationTracker();
} else if (strategy == kNormal) {
return new NavigationTracker(client, browser_info, dialog_manager);
} else {
NOTREACHED() << "invalid strategy '" << strategy << "'";
return nullptr;
}
}

这可能是您所看到的错误:ECONNREFUSED的根本原因,因为虚拟元素/iframe可能未按照< em>Chrome 浏览器启动日志:

[1517231304.270][DEBUG]: DEVTOOLS COMMAND Runtime.evaluate (id=11) {
"expression": "var isLoaded = document.readyState == 'complete' || document.readyState == 'interactive';if (isLoaded) { var frame = document.createElement('iframe'); frame.name = 'chromedriver dummy frame'; ..."
}

此问题又会导致以下行:

webElement.getAttribute('style')

导致实际错误。

<小时/>

解决方案

为了进行更清晰的测试,您可能需要使用 PageLoadStrategy 作为正常,而不是:

capabilities.setPageLoadStrategy('normal');
<小时/>

片尾

一些相关讨论:

关于node.js - Selenium webdriver 错误 : ECONNREFUSED connect ECONNREFUSED 127. 0.0.1:9515,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55194945/

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