9
votes

Définition de la langue du navigateur dans Cypress

Est-il possible de dire à Cypress de lancer Chrome avec une certaine langue (par exemple l'allemand) car j'ai une application que je dois tester dans plusieurs langues. Je ne peux voir cela détaillé nulle part dans la documentation, ce qui suggère que ce n'est pas possible pour le moment.

J'ai essayé d'ajouter l'argument --lang au lancement de Chrome, mais cela ne semble pas avoir tout effet et Chrome utilise toujours l'anglais. Voir le code pluginsFile ci-dessous.

module.exports = (on, config) => {
  on('before:browser:launch', (browser = {}, args) => {
    if (browser.name === 'chrome') {
      args.push('--lang=de')
      return args
    }
  })
}

J'ai également essayé --lang = de-DE qui ne l'a pas fait non plus travail.


3 commentaires

as-tu trouvé une solution? J'essaye également de trouver une réponse à cela


Comment votre application Web utilise-t-elle la langue? Pouvez-vous donner un extrait de code? Regarde-t-il simplement navigator.language ?


Est-ce que cela répond à votre question? Comment définir la langue du navigateur dans Cypress.io (électron / chrome)?


3 Réponses :


3
votes

J'ai eu un problème similaire, lors du lancement de cypress, le navigateur était dans ma langue par défaut (néerlandais), alors que tous nos tests s'attendent à ce que l'anglais soit la langue par défaut. J'ai trouvé une question sur un forum d'assistance en mentionnant également le paramètre --lang param, mais cela n'a eu aucun effet sur la langue de mon navigateur.

En fin de compte, je pourrais contourner le problème en modifiant la variable d'environnement LANG - j'utilise Linux. Dans le terminal, j'ai tapé ce qui suit:

export LANG = "en_EN.UTF-8"

et puis j'ai lancé Cypress depuis le même terminal. Vous pouvez créer un script, et pour d'autres systèmes d'exploitation tels que MacOS et Windows, il existe probablement une variable d'environnement similaire.


0 commentaires

3
votes

Voir l'exemple complet dans https://glebbahmutov.com/ blog / cypress-tips-and-tricks / # control-navigatorlanguage mais en bref

it('shows Klingon greeting', () => {
  cy.visit('index.html', {
    onBeforeLoad (win) {
      // DOES NOT WORK
      // Uncaught TypeError: Cannot assign to read only property
      // 'language' of object '[object Navigator]'
      // win.navigator.language = 'Klingon'

      // instead we need to define a property like this
      Object.defineProperty(win.navigator, 'language', {
        value: 'Klingon'
      })
    }
  })
  cy.contains('#greeting', 'nuqneH').should('be.visible')
})


2 commentaires

Cela ne fonctionne pas du tout. Vérifiez new Date (). ToLocaleString () et vous verrez que le format est inchangé. Je ne pense pas qu'il soit possible de changer la langue d'un utilisateur avec Javascript, et pour une bonne raison. Cela doit être géré au niveau Cypress.


Vous pouvez toujours souhaiter que la langue de votre application soit modifiée par programme. Cela ne résout pas la réponse directement et pour toutes les applications, mais dans de nombreux cas, il est logique d'avoir la possibilité de remplacer la langue du navigateur (à partir de la préférence de l'utilisateur, d'un cookie, d'un commutateur, etc.). Peut-être pourriez-vous partager vos idées sur la bonne raison pour laquelle il n'est pas possible de changer de langue?



5
votes

Outre l'ajout d'options de ligne de commande, vous pouvez également modifier les préférences du navigateur en utilisant l'API de lancement du navigateur Cypress ( documentation ). Cela vous permet de remplacer le paramètre d'en-tête Accept-Language comme ceci:

on('before:browser:launch', (browser, launchOptions) => {
  if (browser.family === 'chromium' && browser.name !== 'electron') {
    launchOptions.preferences.default.intl = { accept_languages: "nl" }
    return launchOptions
  }
}

Notez que l'objet launchOptions.preferences.default peut être vide, essayez donc d'attribuer à launchOptions.preferences.default.intl.accept_languages ​​ peut échouer directement.

Pour l'un de nos projets, cela a suffi pour que le site que nous testions apparaisse dans la bonne langue. Si vous avez besoin de plus, vous pouvez essayer de modifier d'autres paramètres de langue (voir code source de Chrome et recherchez" intl ").

En passant, il semble que l'option de ligne de commande --lang ne fonctionne que sur Windows, selon la documentation de Chrome . Sous Mac, vous devez modifier vos préférences système et sous Linux, vous pouvez utiliser la variable d'environnement LANGUAGE.


2 commentaires

c'est pourquoi --lang ne fonctionnerait pas pour moi ... de toute façon, avez-vous une idée de la façon dont cela pourrait être changé à partir du test lui-même? si c'est possible du tout


@crollywood Désolé, cela fait des mois que j'ai travaillé pour la dernière fois avec Cypress, et je ne sais pas. Vous pourriez peut-être poser une question distincte et / ou essayer les canaux d'assistance de Cypress. J'imagine que changer la langue du navigateur par test peut nécessiter de quitter et de relancer le navigateur.