Test E2E pour sélectionner la boîte de sélection avec CasperJS, Nightmare et Python + WebDriver + PhantomJS

Objectif

J'écrivais un test E2E et j'étais accro à la sélection d'une boîte de sélection, alors j'essaierai de l'écrire dans plusieurs bibliothèques après la recherche. Écrivez quelques fonctionnalités qui vous intéressent.

--Sélectionnez la case de sélection

CasperJS

/*global casper*/
casper.test.begin('Test Sample', 2, function(test) {
    var selectbox = '#lang-chooser';
    var lang = 'fr';

    casper.start('https://www.google.com/doodles');

    casper.then(function() {
        var params = {};
        test.comment('change the value of the select box');

        params[selectbox] = lang;
        this.fillSelectors('#language-menu',params);

        test.assertEvalEquals(
            function(selector) {
                return document.querySelector(selector).value;
            },
            lang,
            'value of the select box has been changed',
            selectbox);
    });

    casper.then(function() {
        var comment = 'is included language type in url';
        var re = new RegExp('\\?hl=(' + lang + ')');
        test.assertMatch(this.getCurrentUrl(), re, comment);
    });

    casper.then(function() {
        this.capture('google.png');
    });

    casper.run(function() {
        test.done();
    });

});

Résultat d'exécution

$ casperjs test test_google_selector.js
Test file: test_google_selector.js
# Test Sample
PASS Test Sample (2 tests)
# change the value of the select box
PASS value of the select box has been changed
PASS is included language type in url
PASS 2 tests executed in 2.477s, 2 passed, 0 failed, 0 dubious, 0 skipped.

Nightmare + mocha

/*jshint -W024 */
var Nightmare = require('nightmare');
var assert = require("assert");

describe('Test Sample', function(){
    this.timeout(15000);

    it('can change the value of the select box.', function(done){
        var selector = '#lang-chooser';
        var lang = 'fr';
        new Nightmare()
            .goto('https://www.google.com/doodles')
            .select(selector, lang)
            .evaluate(function (selector) {
                return document.querySelector(selector).value;
            }, function (select_value) {
                assert.equal(lang, select_value, 'value of the select box has been changed');
            }, selector)
            .wait(3000)
            .evaluate(function(lang) {
                var re = new RegExp('\\?hl=(' + lang + ')');
                return location.href.match(re);
            }, function(is_included_lang_in_url) {
                assert.ok(is_included_lang_in_url, 'is included language type in url');
            }, lang)

            .screenshot('google.png')
            .run(done);
    });
});

Résultat d'exécution

$ node_modules/.bin/mocha test_google_selector.js


  Test Sample
    ✓ can select a select box. (3932ms)


  1 passing (4s)

Python + webdriver + phantomjs

from selenium import webdriver
from selenium.webdriver.support.ui import Select
import unittest


class TestSample(unittest.TestCase):
    def setUp(self):
        self.driver = webdriver.PhantomJS()
        self.driver.get('https://www.google.com/doodles')

    def tearDown(self):
        self.driver.quit()

    def test_lang_chooser(self):
        """can select a select box"""
        driver = self.driver
        selector = 'select#lang-chooser'
        lang = 'fr'

        # change the value of the select box
        element = driver.find_element_by_css_selector(selector)
        select = Select(element)
        select.select_by_value(lang)

        element = driver.find_element_by_css_selector(selector)
        self.assertEqual(
            lang, element.get_attribute("value"),
            'value of the select box has been changed'
        )

        self.assertTrue(
            '?hl={lang}'.format(lang=lang) in driver.current_url,
            'is included language type in url'
        )

        driver.save_screenshot("google.png ")


if __name__ == "__main__":
    unittest.main()

Résultat d'exécution

$ python test_google_selector.py -v
test_lang_chooser (__main__.TestSample)
can select a select box ... ok

----------------------------------------------------------------------
Ran 1 test in 5.608s

OK

Impressions

Sans le vouloir, il est devenu le seul système Phantom JS ... Comment rédigez-vous un test facile à lire? J'aime les commentaires. Je me demande si le test E2E devrait être quelque chose qui peut être écrit et exécuté rapidement et rapidement. Il y en a plus à base de sélénium ...


Casperjs

Nightmare

--Si vous n'attendez pas longtemps, une erreur peut se produire. Parfois, il est trop tard et je ne sais pas où attendre ... ―― C'était extrêmement lent lorsque je l'ai utilisé sur un certain écran de connexion ――Lors de la rédaction d'un test, je me demande si vous pouvez mélanger le moka ou le chai comme vous le souhaitez. Cette bibliothèque contient également peu d'informations ... --Evaluate () est un peu difficile à comprendre ou à utiliser. C'est peut-être inévitable car c'est une telle chose.

Python

--Intéressé ――Je pensais que le code serait redondant, mais CasperJS est également assez redondant ... Cela dépend de la façon dont vous l'écrivez. ――Il peut être surprenant de savoir comment bien écrire.


référence

Recommended Posts

Test E2E pour sélectionner la boîte de sélection avec CasperJS, Nightmare et Python + WebDriver + PhantomJS
Fractal pour faire et jouer avec Python
Comment faire un test de sac avec python
Utilisez le pilote Web phantomjs de sélénium avec unittest de python
Code Python pour former et tester avec Custom Vision of Cognitive Service
Grattage de la nourriture avec python et sortie en CSV
MessagePack-Try pour lier Java et Python avec RPC
Mémo pour créer votre propre Box avec le Python de Pepper
Procédure pour charger MNIST avec python et sortie en png
Je veux gérer l'optimisation avec python et cplex
Essayez le fonctionnement de la base de données avec Python et visualisez avec d3
Jugement des nombres premiers avec Python
Grattage avec Python + PhantomJS
Conduisez WebDriver avec python
Jugement des nombres premiers avec python
Veriloggen et cocotb sont utilisés pour concevoir et tester Verilog en Python uniquement.
écran et écran partagé avec connexion python et ssh au serveur distant
[Python] Comment jouer avec les variables de classe avec décorateur et métaclasse
Tester Python avec Miniconda dans un environnement OS X et Linux avec travis-ci
Sélectionnez le fichier dans la boîte de dialogue avec python → Afficher le nom du fichier dans la boîte de message
Essayez d'ouvrir une sous-fenêtre avec PyQt5 et Python
[Jouons avec Python] Traitement d'image en monochrome et points
Convertir une vidéo en noir et blanc avec ffmpeg + python + opencv
J'ai essayé de créer une interface graphique à trois yeux côte à côte avec Python et Tkinter
Obtenez des données supplémentaires vers LDAP avec python (Writer et Reader)
Comment se connecter à AtCoder avec Python et soumettre automatiquement
Résumé des modules qui automatisent et facilitent l'installation de WebDriver avec Python
Programmation avec Python et Tkinter
Connectez-vous à BigQuery avec Python
Chiffrement et déchiffrement avec Python
Connectez-vous à Wikipedia avec Python
Publiez sur Slack avec Python 3
Basculer python vers 2.7 avec des alternatives
Écrire en csv avec Python
Module de débogage et de test Python
python avec pyenv et venv
Défiez Python3 et Selenium Webdriver
Fonctionne avec Python et R
Faites fonctionner Jupyter avec l'API REST pour extraire et enregistrer le code Python
Je veux résoudre APG4b avec Python (seulement 4.01 et 4.04 au chapitre 4)
Comment importer des fichiers CSV et TSV dans SQLite avec Python
IME On / Off est affiché par LED en coopération avec Python et Arduino
Comment créer une caméra de surveillance (caméra de sécurité) avec Opencv et Python
Exemple à utiliser après l'authentification OAuth de l'API BOX avec Python
J'ai essayé de faire un processus d'exécution périodique avec Selenium et Python
Comment gérer les erreurs lors de l'installation de Python et de pip avec choco
Essayez d'afficher la carte google et la carte géographique avec python
Jetez quelque chose dans Kinesis avec python et assurez-vous qu'il est dans
J'ai essayé de détecter facilement les points de repère du visage avec python et dlib
Déplacer les données vers LDAP avec python Change / Delete (Writer et Reader)
Comment créer un environnement d'exécution Python et Jupyter avec VSCode
[Python] Essayez de reconnaître les caractères des images avec OpenCV et pyocr