3 votes

La commande click de Selenium RC reste bloquée

Solution : Aujourd'hui (2011-04-13), Selenium gère mal les boîtes de confirmation sous Firefox 4. J'ai dû revenir à Firefox 3.16 et le problème a disparu. Merci encore.

Question originale :

Bonjour aux gourous de Selenium,

J'essaie d'exécuter un test automatisé de navigateur à partir de Java en utilisant Selenium 2.0b3 comme client Java et serveur autonome.
Le serveur démarre un Firefox 4 avec un profil spécifique.

Le test est bloqué à une commande "click" ; il attend et aucun timeout/exception/aucune erreur ne se produit. Pendant ce clic, une boîte de confirmation apparaît, je suppose donc que c'est là le problème, mais je ne sais pas pourquoi cela reste bloqué. Dans Selenium IDE, cette boîte de confirmation n'apparaît pas, mais seulement dans RC.

Le problème n'est pas que le clic ne se produit pas (parce que la boîte de confirmation apparaît), mais que cette boîte de confirmation se bloque. J'ai essayé ce qui suit, mais cela n'a pas aidé :

selenium.click("css=div[id=command_Delete]");
selenium.click("id=command_Delete");
String JSscript = "jQuery('#command_Delete').click();" // See http://api.jquery.com/click/
selenium.runScript(JSscript);

Ce ne sont là que des façons de commencer le clic. Peut-être devrais-je commencer un autre fil en suivant ces liens : http://www.sqaforums.com/showflat.php?Cat=0&Number=567974&an=&page=0&vc=1

Merci : Andras

Code Java :

selenium.click("//div[@id='command_Delete']/span");
//stucks here
//so this is not reached:
String confirmation = selenium.getConfirmation();

HTML :

<div id="command_Delete" class="...">
    <div>...</div>
    <span>Delete</span>
    <div>...</div>
    <br><br>
</div>

Javascript :

<script type="text/javascript">
    $('command_Delete').addEvent('click',function(){
        var isConfirmTrue = confirm('Do you want to delete?');
        if (isConfirmTrue) {
            var myForm = getFormObj(document, "deleteForm");
            submitForm(myForm);
        }
    });
</script>

Et dans le Java, il attend que le selenium rc réponde :

HttpURLConnection.getInputStream() line: 912 [local variables unavailable]  
HttpURLConnection(HttpURLConnection).getResponseCode() line: 367 [local variables unavailable]  
HttpCommandProcessor.getResponseCode(HttpURLConnection) line: 147   
HttpCommandProcessor.getCommandResponseAsString(String) line: 167   
HttpCommandProcessor.executeCommandOnServlet(String) line: 107  
HttpCommandProcessor.doCommand(String, String[]) line: 89   
DefaultSelenium.click(String) line: 167 
...

1voto

Argote Points 1592

Avez-vous essayé de remplacer

selenium.click("//div[@id='command_Delete']/span");

avec

selenium.click("id=command_Delete");

?

Il me semble qu'étant donné que l'événement est lié à l'élément div lui-même, ce qui devrait fonctionner.

En outre, vous pouvez exécuter la commande click directement en faisant cela, j'utilise jQuery puisque vous semblez l'avoir déjà chargé sur la page et que cela facilite les choses (en particulier pour les tests inter-navigateurs) :

String JSscript = "jQuery('#command_Delete').click();" // See http://api.jquery.com/click/
selenium.runScript(JSscript);

Il vous suffit d'évaluer si cette solution vous convient.

1voto

Ardesco Points 2169

Si une boîte de confirmation apparaît, le test sera bloqué jusqu'à ce que cette boîte de confirmation soit supprimée. Vous pouvez effectuer un test manuel rapide pour voir si c'est le cas.

Exécutez votre test et lorsque la boîte de confirmation s'affiche, interagissez manuellement avec elle. Si tout va bien, le test devrait se poursuivre normalement à partir de ce moment-là.

Selenium attend que la page se charge, mais la boîte pop up bloque le chargement de la page, ce qui finit par provoquer un dépassement de délai.

Vous pouvez essayer de contourner ce problème en utilisant selenium.chooseOkOnNextConfirmation() ; avant votre clic.

0voto

Xtro Points 301

Êtes-vous sûr que votre widget peut se permettre un clic ?

J'essaierais l'identifiant CSS :

selenium.click("css=div[id=command_Delete]");

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X