2017-10-18 7 views
-1

J'ai essayé de cliquer sur l'option d'un select, puis sur le bouton Enregistrer. Je peux voir au navigateur que cela fonctionne vraiment mais quand cliquez sur le bouton enregistrer, le google chrome ne comprend pas et dit que je n'ai pas cliqué sur ce champ obligatoire. Comment réparer?Cliquez sur l'option d'un sélecteur utilisant un rapporteur sur Google ChromeDriver;

<select class="form-control ng-pristine ng-invalid ng-touched" id="ano-norma" required=""> 
<option disabled="" selected= "" value= "undefined" > Selecione um ano< /option> 
<option value="2017" > 2017 < /option><option value="2016">2016</option > 
<option value="2015" > 2015 < /option> 
<option value="2014">2014</option > 
<option value="2013" > 2013 < /option> 
<option value="2012">2012</option > 
<option value="2011" > 2011 < /option> 
<option value="2010">2010</option > 
<option value="2009" > 2009 < /option> 
<option value="2008">2008</option > 
</select> 

J'ai essayé:

element(by.id('ano-norma')).all(by.cssContainingText('option', '2017')).click(); 

et

element(by.id('ano-norma)).click().then(() => { 
element(by.id('ano-norma)).all(by.tagName('option)).get(2).click(); 
}); 

J'utilise Google Chrome comme navigateur.

Il semble que google chrome ne comprend pas que la liste déroulante a déjà été sélectionnée.

enter image description here

"Campo obrigatório" signifie "champ obligatoire"

+0

Où est votre clic sur le code de sauvegarde? –

+0

dans une autre fonction en utilisant 'element (by.id ('save')). Click();' – paulotarcio

+0

s'il vous plaît partager l'erreur de la console –

Répondre

0

Même été une liste déroulante, j'ai utilisé click() et sendkeys() et son fonctionne parfaitement. .

element(by.id('ano-norma')).click().then(() => { 
       element(by.id('ano-norma')).sendKeys('2015'); 
       }); 

browser.actions() SendKeys (protractor.Key.ENTER) .Effectuer();

0

votre code est erroné, pas d'élément(). Tous(). Cliquez sur(). il devrait ressembler à ceci:

element(by.id('ano-norma')).element(by.cssContainingText('option', '2017')).click(); 

ou

element(by.cssContainingText('#ano-norma > option', '2017')).click(); 
+0

Je l'ai essayé aussi, mais n'a pas fonctionné. – paulotarcio

+0

à partir de votre commentaire sur la réponse ci-dessus, la liste déroulante sélectionnez l'option correcte, mais vous rencontrez le problème lorsque vous cliquez sur le bouton Enregistrer. Donc, votre problème n'a rien à voir avec 'google chrome' ou 'ne comprends pas l'option sélectionnée par rapporteur'. Je suppose que la liste déroulante est liée à certains événements lorsque vous choisissez son option, ces événements peuvent déclencher le succès lorsque vous le faites manuellement, mais le script d'automatisation n'a pas réussi à les déclencher même si vous avez vu l'option effectivement modifiée. Je pense que vous devez regarder dans l'événement (lié à la liste déroulante) qui intéresse sur le changement d'option. – yong

0

Vous avez un problème de synchronisation. Lorsque vous utilisez then(), il ouvre une nouvelle tâche asynchrone et laisse le protacteur en parallèle continuer avec les lignes suivantes après le then(). Par conséquent, vous cliquez pratiquement sur le bouton de sauvegarde presque en même temps, lorsque vous ouvrez la liste déroulante. Si votre bouton de sauvegarde est inactif, avant la sélection de la liste déroulante, tout semble avoir fonctionné, rien n'a été sauvegardé.

Solution 1 (recommandé): appelez votre -fonction à l'intérieur du then() -part.

element(by.id('ano-norma')).click().then(() => { 
    element(by.id('ano-norma')).all(by.tagName('option')).get(2).click(); 
    //call your saveButton-function here. 
}); 

Ou mieux, essayer dans un cas de test séparé:

it("should test select dropdown and save", function(done){ 
    element(by.id('ano-norma')).click().then(() => { 
     element(by.id('ano-norma')).all(by.tagName('option')).get(2).click(); 
     browser.waitForAngular(); //in case the dropdown-selection triggers processes 
     $(buttonElement).click();//call your saveButton-function here. 
     done(); 
}); 
}); 

Solution 2: Utilisez un rappel pour laisser Protractor savoir, quand continuer (ne pas tester celui-ci, si cela pourrait ne pas fonctionner comme je l'écris ici)

testCaseDropdownSelection = function(done) { 
    element(by.id('ano-norma')).click().then(() => { 
     element(by.id('ano-norma')).all(by.tagName('option')).get(2).click(); 
     done(); 
    }); 
}; 
testCaseClickSaveButton = function(){ 
    $('saveButton').click(); 
}; 

Faites-moi savoir si l'une des solutions a fonctionné pour vous.

+0

Salut, je l'ai essayé aussi mais n'a pas fonctionné. Donc je clique d'abord sur l'élément puis j'utilise sendKey pour écrire la valeur et, je ne sais pas pourquoi, ça marche – paulotarcio

+0

Avez-vous une action de chargement en cours après avoir sélectionné la liste déroulante, donc votre page n'est pas prête à être traitée l'action de sauvegarde encore? Sachez également que votre cas de test peut se terminer avant que la partie 'then()' soit terminée. Je vais modifier ma réponse pour vous donner une approche légèrement ajustée à essayer. –

+0

@paulotarcio J'ai étendu ma solution 1 avec un meilleur exemple complet. –