Test de html cassé avec casperjs

J'essaie d'exécuter des routines de configuration avant d'exécuter des tests de navigateur CasperJs.

À un moment donné, je ne peux pas remplir de données de formulaire car il y a un code HTML mal placé (une étiquette de formulaire est mal placée dans une table):

<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>Test</title> </head> <body> <table> <form id="test1"> <input type="text" name="selector_1" /> </form> </table> </body> </html> 

C'est le cas de test simple:

 casper.test.begin('Test', 0, function suite(test) { casper.start('http://localhost:8000', function() { this.fill('form#test1', { "selector_1": 'Yo!' }, true); }); casper.run(function() { test.done(); }); }); 

Le résultat des tests est: error: Errors encountered while filling form: no field matching names selector "selector_1" in form

Cela fonctionne lorsque je supprime simplement l'étiquette de table dans cet exemple.

Malheureusement, je ne peux pas changer cela dans le «monde réel» car le HTML cassé provient d'une application. Je n'ai aucun accès au code source.

Est-ce que cela peut être résolu avec CasperJs directement?

Je suppose que je pourrais aussi essayer de "réparer" le HTML en remplaçant les pièces brisées. Cela pourrait-il être le seul moyen de fonctionner?

Vous devriez essayer d'utiliser fillXPath (mais il est disponible dans la version 1.1):

 casper.test.begin('Test', 0, function suite(test) { casper.start('http://127.0.0.1:8020/test_casper/testme.html', function() { this.test.assertExists({ type: 'xpath', path: '//*[@name="selector_1"]' }, 'the element exists'); this.fillXPath('form#test1', { '//input[@name="selector_1"]': 'Yo!' }, true); }); casper.run(function() { test.done(); }); });