【问题标题】:Chromedriver: session deleted because of page crashChromedriver:由于页面崩溃而删除了会话
【发布时间】:2025-12-14 07:30:01
【问题描述】:

我正在使用 protractorjasmine 为我的 AngularJS 应用程序编写测试。

我正在使用以下代码测试文件上传案例:

const fileElem = element(by.css('input[type="file"]'));

fileElem.sendKeys(absoluteFilePath);

browser.sleep(500);

在本地工作与下一个包:

"chromedriver": "2.38.2", "protractor": "5.3.1", Chrome - v.66.0.3359.139

但是当我在 GitLab CI 上运行这个测试时,我得到一个错误:

[chrome #01] F ✗ 应该上传文件

[chrome #01] - 失败:未知错误:会话已删除,因为 页面崩溃

[chrome #01] 来自未知错误:无法确定加载状态

[chrome #01] 来自标签崩溃

[chrome #01](会话信息:headless chrome=65.0.3325.181)

[chrome #01](驱动程序信息:chromedriver=2.38.552522 (437e6fbedfa8762dec75e2c5b3ddb86763dc9dcb),平台=Linux 4.13.5-coreos-r2 x86_64)

我正在使用 ng-file-upload 指令。

感谢您的帮助!

【问题讨论】:

  • 您给的代码不包括点击提交开始上传的部分,那么问题是来自这一行:fileElem.sendKeys(absoluteFilePath,还是在上传过程中?
  • @yong 它会上传有关模型更改的文件。所以在这一行:fileElem.sendKeys(absoluteFilePath); 它改变模型并上传文件。它在本地运行良好。
  • 远程机器上是否也存在上传的文件?
  • 该文件位于项目所在的文件夹中。它存在于远程机器上。
  • 我猜无论您选择上传什么文件,您都会遇到同样的问题,您可以尝试证明我的猜测。如果是这样,我可以找到根本原因。

标签: javascript google-chrome protractor selenium-chromedriver ng-file-upload


【解决方案1】:

我在我的 vps 上运行 selenium 时遇到了同样的问题。 5小时后我发现,太多未关闭的进程尝试使用驱动程序。试着把他们都杀了

pkill -f chrome*

【讨论】:

    【解决方案2】:

    sendKeys逐个字符输入字符串,模型会在输入每个字符时检测到变化。因此,如果文件路径有 10 个字符,模型将检测 10 次更改。每次模型更改都会触发文件上传。但是前9次文件路径不正确,频繁上传文件导致浏览器崩溃。

    const fileElem = element(by.css('input[type="file"]'));
    
    // input file path by javascript in silent to avoid multiple model change
    browser.executeScript(
       'arguments[0].value=arguments[1];',
       fileElem.getWebElement(),
       absoluteFilePath 
    );
    
    // input a blank space at the end of file path 
    // to let model detect change, then trigger file uploading.
    fileElem.sendKeys(" "); 
    

    【讨论】:

    • 它不起作用。我们不能从javascript 设置<input type="file">