web-dev-qa-db-fra.com

La commande de clic dans Selenium WebDriver ne fonctionne pas

Je viens tout juste de faire une exportation de mon code Selenium IDE vers le pilote Web Selenium. J'ai constaté qu'un grand nombre de commandes qui fonctionnaient dans IDE échouaient to work ou Selenium Web Driver prétend ne pas être supporté du tout.

Actuellement, je cherche à savoir pourquoi cliquer sur un bouton ne fonctionne pas avec le pilote Web alors qu'il fonctionnait auparavant dans Selenium IDE. Mon navigateur est FF 13 et mon système d'exploitation est Ubuntu.

Extrait de code

WebElement loginButton = driver.findElement(By.name("submit"));
loginButton.click();

J'avais déjà essayé

driver.findElement(By.name("submit")).click();

cependant, la ligne ci-dessus a également échoué. L'élément est en cours de sélection, mais il ne nous connecte pas comme je le souhaiterais. J'ai trouvé d'autres pages avec des problèmes similaires, mais leur problème semblait être avec Internet Explorer et non avec Firefox. Je ne veux même pas penser aux problèmes IE me donnera plus tard.

merci,

P.S. Un conseil sur une meilleure façon de migrer Selenium IDE vers Selenium Webdriver sans perdre tous les tests que j'ai écrits pourrait également résoudre ce problème.

35
OrwellHindenberg

Si vous savez avec certitude que l'élément est présent, vous pouvez essayer ceci pour simuler le clic - si .Click() ne fonctionne pas

driver.findElement(By.name("submit")).sendKeys(Keys.RETURN);

ou

driver.findElement(By.name("submit")).sendKeys(Keys.ENTER);
76
TheLifeOfSteve

Une chose importante à surveiller est de savoir si un bouton est activé ou non. Vous pouvez toujours cliquer dessus et rien ne tombera et l'élément est là, mais il n'est pas prêt à être cliqué, donc ne fait rien.

J'ai utilisé webdriver et il m'a fallu presque toute la journée pour comprendre cela!

La méthode suivante semble fonctionner de manière fiable (dans mon environnement pour un bouton!)

    private void TryClick(By selector)
    {
        var wait = WaitUpTo(TimeSpan.FromSeconds(10));
        var element = wait.Until(ExpectedConditions.ElementIsVisible((selector)));

        //really important bit!
        WaitUpTo(TimeSpan.FromSeconds(5))
            .Until(d => element.Enabled);

        element.Click();
    }

vous l'utilisez quelque chose comme

TryClick(By.XPath("//button[contains(.//*,'Some Text')]"));
8
JonnyRaa

Veuillez vous référer ici https://code.google.com/p/Selenium/issues/detail?id=6756 In crux

Ouvrez les paramètres d’affichage du système et assurez-vous que la taille de la police est définie à 100%.

3
Nishant

J'utilisais firefox et une raison quelconque, il ne prenait pas la commande de clic, mais depuis 2 mois, il fonctionnait. J'avais l'impression d'utiliser sendKeys et cette page a résolu le problème. Maintenant j'utilise sendKeys (Keys.Enter)

2
user2743318

Merci pour toutes les réponses tout le monde! J'ai trouvé une solution, il s'avère que je n'ai pas fourni assez de code dans ma question.

Le problème était PAS avec la fonction click () après tout, mais plutôt lié à l'authentification cas utilisée avec mon projet. Dans Selenium IDE mon test de connexion a exécuté une commande "open" à l'emplacement suivant,

/cas/login?service=https%1F%8FAPPNAME%2FMOREURL%2Fj_spring_cas_security

Ça a marché. J'ai exporté le test sur le WebDriver Selenium qui a naturellement préservé cet emplacement. La commande dans Selenium Webdriver était,

driver.get(baseUrl + "/cas/login?service=https%1A%2F%8FAPPNAME%2FMOREURL%2Fj_spring_cas_security");

Pour des raisons que je n'ai pas encore comprises, ce qui précède a échoué. Quand je l'ai changé pour,

driver.get(baseUrl + "MOREURL/");

La commande de clic a soudainement commencé à fonctionner ... Je modifierai cette réponse si je peux comprendre pourquoi c'est exactement cela.

Remarque: j'ai masqué les URL utilisées ci-dessus pour protéger le produit de mon entreprise.

2
OrwellHindenberg

Il n'y a rien de mal avec l'une ou l'autre version de votre code. Quoi que ce soit qui cause cela, ce n'est pas ça.

Avez-vous vérifié trois fois votre localisateur? Votre élément a définitivement name = submit not id = submit?

2
el roso