Webdriverio: Impossible d'appeler une commande standard non W3C en mode W3C

Créé le 10 juin 2019  ·  3Commentaires  ·  Source: webdriverio/webdriverio

Environnement (veuillez compléter les informations suivantes) :

  • Version WebdriverIO : 4.14.4
  • Mode : testeur WDIO
  • Si WDIO Testrunner, exécution sync/async : sync
  • Version Node.js : 10.15.0
  • Version NMP : 6.4.1
  • Nom et version du navigateur : google-chrome-stable_75.0.3770.80-1
  • Nom et version de la plate-forme : LINUX
  • ** "wdio-concumber-framework": "^1.1.0", "wdio-selenium-standalone-service": "0.0.10",

Configuration de WebdriverIO
Un exemple de la façon dont vous avez configuré WebdriverIO config

const path = require("path");

const isDebugMode = process.env.DEBUG === "true";

const chrome = 
    {
        browserName: "chrome",
        chromeOptions: {
            args: ["--window-size=1366,768"]
        }
    };

var capabilities = [chrome];

if(process.env.RUNNING_IN_DOCKER)
{
    capabilities = 
        [
            {
                browserName: "chrome",
                chromeOptions: {
                    args: ["--headless", "--window-size=1366,768"]
                }
            }
            // TO DO: Add headless Firefox see docker-compose.yml
        ];
} else if(process.env.ALL_BROWSERS)
{
    capabilities = 
        [
            chrome,
            {
                // set protected mode to the same value across all four zones in tools-> internet options -> security
                // also make sure zoom level is 100%
                browserName: "internet explorer"
            }
        ];
}

exports.config = {
    debug:  isDebugMode,
    execArgv: isDebugMode ? ['--inspect=9299'] : [],
    sync: true,
    maxInstances: 1,
    //maxInstances: isDebugMode ? 1 : 10,
    // Use selenium standalone server locally so we don't have a seperate selenium server in a seperate command prompt
    // Use the selenium grid via docker on TC
    services: process.env.RUNNING_IN_DOCKER ? [] : ["selenium-standalone"],
    seleniumLogs: "./logs",

    specs: [
        "./features/**/*.feature"
    ],

    exclude: [
        "./features/**/topic-page.feature"
    ],

    capabilities: capabilities,

    logLevel: "verbose",
    coloredLogs: true,
    screenshotPath: "./errorShots/",
    baseUrl: "https://*********/",
    reporters: process.env.RUNNING_IN_DOCKER ? ["spec", "teamcity"] : ["spec"],

    // Use BDD with Cucumber
    framework: "cucumber",
    cucumberOpts: {
        compiler: ["js:babel-register"], // Babel so we can use ES6 in tests
        require: [
            "./steps/given.js",
            "./steps/when.js",
            "./steps/then.js"
        ],
        tagExpression: "not @pending", // See https://docs.cucumber.io/tag-expressions/
        timeout: 30000
    },

    // Set up global asssertion libraries
    before: function before() {
        const chai = require("chai");
        global.expect = chai.expect;
        global.assert = chai.assert;
        global.should = chai.should();
    },
}

Décrivez le bogue
Depuis la mise à jour de Chrome et de ChromeDriver, j'obtiens l'erreur suivante :

Error: Promise was rejected with the following reason: unknown command: Cannot call non W3C standard command while in W3C mode at elementIdDisplayed("e88a07f5-2ca3-42ad-b458-3d66797b37f0") - isVisible.js:71:55
Si vous regardez les changements pour ChromeDriver 75.0.3770.8 http://chromedriver.chromium.org/downloads
vous verrez qu'il mentionne "Le changement le plus notable est que ChromeDriver s'exécute désormais en mode conforme à la norme W3C par défaut."

J'ai réussi à contourner ce problème en spécifiant w3c: false dans ChromeOptions mais je ne pense pas que ce soit la bonne approche. Il semblerait qu'il y ait quelque chose quelque part qui appelle une commande "non standard w3c" et je suppose que c'est quelque part dans webdriverio.

Reproduire
Configurez un environnement de test avec les détails ci-dessus et exécutez le test npm.

Comportement attendu
Les tests doivent s'exécuter sans l'erreur Cannot call non W3C standard command while in W3C mode

Commentaire le plus utile

Ce n'est pas un problème avec chrome, mais un problème dans la façon dont vous spécifiez les options. Chrome 75 est par défaut conforme au W3C et vous devez définir W3C sur false pour pouvoir utiliser le JSONWP (comme mentionné dans les notes de version)

Essayez de fournir les options comme

'goog:chromeOptions': {
        'w3c': false,
        args: ["--headless", "--window-size=1366,768"]
    },

Fermez ceci pour le moment car il s'agit d'un problème avec la façon dont vous définissez les options au lieu d'un problème avec WebdriverIO.

Tous les 3 commentaires

Ce n'est pas un problème avec chrome, mais un problème dans la façon dont vous spécifiez les options. Chrome 75 est par défaut conforme au W3C et vous devez définir W3C sur false pour pouvoir utiliser le JSONWP (comme mentionné dans les notes de version)

Essayez de fournir les options comme

'goog:chromeOptions': {
        'w3c': false,
        args: ["--headless", "--window-size=1366,768"]
    },

Fermez ceci pour le moment car il s'agit d'un problème avec la façon dont vous définissez les options au lieu d'un problème avec WebdriverIO.

@wswebcreation Merci, vous avez raison. Pouvez-vous simplement m'indiquer les notes de version, je n'arrive pas à trouver où il est dit de définir W3C sur false.

Merci

@wswebcreation si je pouvais approuver votre commentaire 100 fois je le ferais.

Je viens de NightwatchJS et j'enquête sur cette erreur depuis 2 jours. J'essayais d'exécuter chromedriver sans tête dans un hub de sélénium dockerisé. L'ajout de cet extrait à mon fichier nightwatch.json a fait l'affaire. Pour référence pour les autres, cette section de mon fichier ressemble maintenant à :

"chromeOptions": {
  "w3c": false,
  "args": [
    "--no-sandbox",
    "--headless",
    "--window-size=1920x1080"
  ]
}
Cette page vous a été utile?
0 / 5 - 0 notes