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
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.
Recommended Posts