5 votes

Selenium Firefox Open timeout

Utilisation de Windows 2008, C#, Firefox 3.5.1, Selenium RC (v1.0.1)

Lorsqu'il fonctionne, ce code s'exécute très rapidement et la page se charge en 0,5 seconde.

Cependant, la session semble toujours échouer après 3 à 5 itérations. La commande open provoque la création d'une fenêtre, mais aucune page n'est chargée. Finalement, une exception de dépassement de délai est renvoyée. La page n'a pas réellement expiré. Au contraire, c'est comme si la demande d'URL n'avait jamais atteint la fenêtre du navigateur.

class Program
    {
        static void Main(string[] args)
        {
            for (int i = 0; i < 10; i++)
            {
                var s = new DefaultSelenium("localhost", 4444, "firefox", "http://my.server");
                s.Start();
                s.SetSpeed("300");
                s.Open("/");
                s.WaitForPageToLoad("30000");
                s.Type("//input[contains(@id, '_username')]", "my.test");
                s.Type("//input[contains(@id, '_password')]", "password");
                s.Stop();

            }
        }
    }

2voto

Neil Points 59

J'ai une configuration similaire (Firefox 3.6.15, Selenium RC 1.0.1, mais sur WinXP et en utilisant les bibliothèques Python) et je travaille avec deux sites - l'un d'entre eux est naturellement sujet à des délais d'attente dans des conditions normales d'utilisation (par exemple par un utilisateur humain), alors que les autres ne le sont généralement pas. Ceux qui ne le sont pas semblent un peu plus lents, mais celui qui est sujet aux timeouts est significativement plus lent lorsqu'il est exécuté via RC que par une personne - il n'y a pas toujours de timeout mais l'incidence est beaucoup plus courante.

Mon modèle mental limité pour cela est que, d'une manière ou d'une autre, les étapes supplémentaires que RC effectue (communication avec le navigateur, vérification de ce qu'il voit dans les pages renvoyées, etc.) ajoutent un peu à chaque étape du chargement des pages et qu'à un moment donné, elles le poussent à bout. ) ajoutent un peu à chaque étape du chargement de la page et, à un moment donné, le font déborder le vase.

De plus, j'ai tendance à remarquer que le problème s'aggrave avec le temps, ce qui correspond un peu à ce que le PO a vu (c'est-à-dire que ça marche du premier coup mais pas après 3 à 5 essais). Souvent, un redémarrage semble résoudre les problèmes, mais sans enquête approfondie, je ne peux pas dire pourquoi cela aide, peut-être libère-t-il de la mémoire (la machine est utilisée pour d'autres choses), est alloué à un autre proxys de notre société ou quelque chose d'autre que je n'ai pas envisagé.

Alors... pas vraiment de réponse complète ici (un commentaire aurait été plus approprié, mais mon login ne le permet pas encore), mais au moins cela renforce le fait que vous n'êtes pas le seul. Les redémarrages périodiques sont une chose ennuyeuse à faire, mais en l'absence d'une analyse et de réponses plus intelligentes, ils valent peut-être la peine d'être tentés ?

2voto

9ikhan Points 779

J'ai rencontré le même problème, car la méthode open de DefaultSelenium a un timeout de 30000ms, ce qui signifie qu'elle attend 30s pour que votre page soit chargée. Vous pouvez essayer cette solution triviale.

//selenium is DefaultSelenium instance as private member of the class

            boolean serverStartTry = false;
        int tryCount =1;

        while((!serverStartTry) && tryCount <= Constants.maxServerTries){
            try{
                this.selenium.open(ReadConFile.readcoFile("pageName"));
                System.out.println("Server started in try no: "+tryCount);
                serverStartTry =true;
            }catch (SeleniumException e) {
                System.out.println("Server start try no: "+tryCount );
                System.out.println("Server Start Try: "+ serverStartTry);
                serverStartTry = false;
                tryCount++;
            }
        }
        if(!serverStartTry){
            System.out.println("Server Not started, no. of attempts made: "+tryCount);
            System.exit(0);
        }

1voto

Luca Points 21

Je l'ai résolu en utilisant :

selenium.setTimeout("60000");

avant l'instruction ouverte.

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