4
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

Cypress でファイルダウンロード

Posted at

Cypress 6.3.0 でファイルダウンロードの機能アップがされていたので、簡単に紹介します

公式は以下を参照ください
https://github.com/cypress-io/cypress-example-recipes/tree/master/examples/testing-dom__download

できるようになったこと

  • ダウンロードのダイアログを表示させずにファイルダウンロードをテストできるようになった
  • ダウンロードされたファイルはデフォルトで cypress/downloads に入る(設定で変更可)
  • cypress run のたびに cypress/downloads の中身がクリアされる(クリアしないように変更可)

設定

cypress.json に下記を記載(なお、下記の値はデフォルト値なので、このまま使うなら記載不要)

{
    "downloadsFolder": "cypress/downloads",
    "trashAssetsBeforeRuns": true
}
  • downloadsFolder : ダウンロード先のフォルダ
  • trashAssetsBeforeRuns : run 時にダウンロードフォルダの中身を消すかどうか

テストコード例

Wikipedia から画像をダウンロードしてみます

/// <reference types="cypress" />
context.skip('File Download', () => {
    Cypress.config().baseUrl = 'https://ja.wikipedia.org';

    beforeEach(() => {
        cy.viewport(1280, 800);
        cy.visit('/wiki/TypeScript');
    });

    it('can download file', () => {
        cy.title().should('contain', 'TypeScript');

        // ダウンロードのリンクをクリックする
        cy.get('a[href*="Typescript_logo"]').click();
        cy.get('.mw-mmv-view-expanded').click();
        cy.get('.mw-mmv-download-button').click();
        cy.get('.mw-mmv-download-go-button').click();

        // ダウンロードしたファイルに対して、なんらかのチェック等
        const filename = 'cypress/downloads/Typescript_logo_2020.svg';
        cy.readFile(filename, 'binary').then(buffer => {
            expect(buffer.length).to.be.gt(1000);
        });
    });
});

ダウンロードページに行くまでに何回か画面遷移するので少し長くなっていますが、ダウンロードリンクがあるページを開いて、ダウンロードリンクをクリックするだけで基本的には OK

うまくいかない例

なぜかうまく行かない場合もあり、下記は Qiita のロゴをダウンロードしてみた場合です

/// <reference types="cypress" />
context('File Download', () => {
    Cypress.config().baseUrl = 'https://help.qiita.com';

    beforeEach(() => {
        cy.viewport(1280, 800);
        cy.visit('/ja/articles/others-brand-guideline');
    });

    it('can download file', () => {
        cy.title().should('contain', 'デザインガイドライン');

        cy.get('[href="/images/qiita-png.zip"]').click();
    });
});

ダウンロード自体はできて、ダウンロード先のフォルダにファイルが保存されるのですが、その後 page load がタイムアウトしてテストが止まってしまいます

image.png

Github の Issues にも上がっているので不具合なのかなとも思いますが( https://github.com/cypress-io/cypress/issues/14857 )、もし解消方法がご存知の方がいれば教えてもらえると助かります

4
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?