我在 docker 容器中运行了量角器 selenium 测试。 我必须测试一个不安全的网站。 对于进行 API 调用以从支持的 chrome 获取一些数据的函数之一返回状态代码 400。我在量角器配置文件中添加了以下内容:

chrome args ("--headless", "--no-sandbox", "--disable-dev-shm-usage")

directConnection: true,
disableChecks: true

能力:

acceptInsecureCerts: true
acceptSslCerts: true

我还在我的 .env 文件中添加了以下内容:

NODE_TLS_REJECT_UNAUTHORIZED=0

以下是我得到的网络日志:

{
  method: 'Network.responseReceived',
  params: {
    frameId: '721A00F872D1255AA1DAE58D2DF5D75E',
    loaderId: '70EAE0F82B0AB6BDE6489BC26D77DA34',
    requestId: '117.239',
    response: {
      connectionId: 309,
      connectionReused: true,
      encodedDataLength: 123,
      fromDiskCache: false,
      fromPrefetchCache: false,
      fromServiceWorker: false,
      headers: [Object],
      mimeType: 'application/problem+json',
      protocol: 'h2',
      remoteIPAddress: 'remote ip',
      remotePort: 443,
      securityDetails: [Object],
      securityState: 'insecure',
      status: 400,
      statusText: '',
      timing: [Object],
      url: 'https://api call link'
    },
    timestamp: 15184.562748,
    type: 'XHR'
  }
}
{
  method: 'Network.dataReceived',
  params: {
    dataLength: 185,
    encodedDataLength: 0,
    requestId: '117.239',
    timestamp: 15184.562954
  }
}
{
  method: 'Network.dataReceived',
  params: {
    dataLength: 0,
    encodedDataLength: 203,
    requestId: '117.239',
    timestamp: 15184.563471
  }
}
{
  method: 'Network.loadingFinished',
  params: {
    encodedDataLength: 326,
    requestId: '117.239',
    shouldReportCorbBlocking: false,
    timestamp: 15184.552973
  }
}

需要注意的是,当在 docker 容器外本地运行时,此函数按预期工作,API 调用返回状态代码:200

PS 在 Zelenium 中运行它与在 docker 本地运行的结果相同。

编辑:控制台日志包含以下错误:

Failed to load resource: the server responded with a status of 400 ()

#1楼 票数:0

状态:400

状态:400意味着400 Bad RequestHTTP 400 Bad Request响应状态代码表示服务器无法或不会处理请求,因为某些被认为是客户端错误的东西,例如格式错误的请求语法、无效的请求消息帧或欺骗性请求路由。


您的代码试验、相关 HTML 和完整的错误堆栈跟踪方面的一些信息将帮助我们以更好的方式分析问题。 但是,根据无法加载资源中的讨论:服务器响应状态为 400 ()似乎网页HTML DOM包含启用AJAXJavaScript 的元素。

因此,当您调用get()方法时,在与特定网页上的任何元素交互之前,您需要引入WebDriverWait以使所需元素可点击,这将确保:

  • 关联的JavaScriptAJAX 调用已完成DOM 树的呈现。
  • 所需元素已启用可见,以识别通过Selenium传播的click事件。

参考

您可以在以下位置找到一些相关讨论:


tl; 博士

无法加载资源:服务器通过 Selenium 使用 ChromeDriver Chrome 响应状态为 429(请求过多)和 404(未找到)

  ask by Tralots translate from so

未解决问题?本站智能推荐:

1回复

当我运行Protractor无头测试(Chrome)时,如何处理辅助浏览器选项卡中的页面加载?

当此代码单击“打印”图标时,将生成一个 PDF 文件并显示在新的浏览器选项卡中。 我想切换到这个选项卡,等到 PDF 在那里完成加载,检查 URL 的一部分,然后关闭该辅助选项卡。 上面的测试工作可靠,除非我在 chromes 无头模式下运行它,否则测试运行会中断 控制台输出控制台输出证明它切换到辅
1回复

升级到ChromeDriverv80和Chromev80后,Chrome无法在使用Selenium的docker容器中启动

我在 docker 容器中运行 E2E 测试。 在周五更新 selenium/node-chrome 之后,它将不再起作用。 我曾尝试使用旧版本的 selenium/node-chrome 但它不起作用。 我对 docker 容器等的经验很少。 谷歌浏览器 80.0.3987.106 <-
1回复

通过量角器启动无头chrome在docker中失败

我们在 node/protractor 中编写了我们的 end2end 测试,并且喜欢在 docker 中执行它们。 不幸的是,这失败了,因为 chrome 似乎在启动后立即崩溃。 这是docker run进程的日志 我的问题是,有人已经遇到过这个问题吗? 谁能理解,为什么 chrome 会立即粉碎
1回复

在Docker中运行的量角器测试中使用Chrome驱动程序

使Chrome在Protractor的Docker中工作时遇到了一些麻烦,这是我的protractor.conf.js文件: 我感到困惑的是,为什么Firefox无需设置就可以在我们的Docker容器中工作,而Chrome却不能。 我不明白为什么我们需要Chrome驱动程序才能与Selen
1回复

无法使用Chrome无头和Xvfb运行量角器测试

我一直在搜索并尝试不同的解决方案已有近一周的时间,但仍然找不到答案。 首先,我的环境是:Server Debian 8(无GUI),Protractor 4.0.9,Selenium Server 2.53.1(使用webdriver-manager启动),Chromedriver 2.24
1回复

Docker中的无头Chrome使用Xvfb

我正在尝试使用Xvfb在Docker容器内运行Chrome无头 。 但是,虽然ps显示Chrome进程存在,但它没有到达我的测试网站。 在Docker外部运行相同的命令是成功的。 在Docker中 ,我收到以下消息/错误: 而 在Docker外部运行相同的命令(它工作的地方)我收
1回复

如何在selenium中启用Chrome中的“allow-insecure-localhost”标志?

我想从selenium启用“allow-insecure-localhost”标志。 我怎么能这样做? selenium:3.12.0,Python:3.6.5 Chrome驱动程序创建代码:
1回复

在Chrome中无头运行selenium测试时,Outlook/Yahoo的行为很奇怪

这真的很奇怪。 尝试使用 Yahoo,现在使用 Outlook。 我正在运行 selenium 测试,它从我正在测试的应用程序发送一封电子邮件。 我想通过检查收到的正确电子邮件来断言测试。 发送电子邮件后,我启动第二个 chrome 驱动程序实例并打开我设置的测试电子邮件帐户(Yahoo/Outlo