IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Python Discussion :

une seule instance pour plusieurs procédures (def)


Sujet :

Python

  1. #1
    Candidat au Club
    Homme Profil pro
    Inscrit en
    Janvier 2012
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2012
    Messages : 4
    Points : 4
    Points
    4
    Par défaut une seule instance pour plusieurs procédures (def)
    Bonjour à toutes et tous,

    Je découvre Python afin de créer des tests avec les webdrivers selenium...

    Tout fonctionne correctement si je laisse tout mon test dans une seule procédure, => un seul cas test.
    Par contre, si je fais plusieurs cas de test, le browser se coupe à la fin du premier et un nouveau browser est ouvert pour le deuxième cas de test
    => il est impossible de continuer mon test, je dois à nouveau me loguer dans l'application et revenir à la bonne page pour continuer le test ...

    Ne serait-il pas possible que tous mes tests fonctionnent sur la même instance du browser ? Si oui, comment svp ?

    Donc, dans l'exemple ci-dessous, j'aimerais qu'après le Test_001(qui est le login) le Test_002 se poursuive dans le même browser.
    Pour le moment, le browser se ferme à la fin du Test_001, et un nouveau browser s'ouvre sur une page blanche ...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
     
    # -*- coding: utf-8 -*-
    from selenium import webdriver
    from selenium.webdriver.common.by import By
    from selenium.webdriver.common.keys import Keysfrom selenium.webdriver.support.ui import Select
    from selenium.common.exceptions import NoSuchElementException
    import unittest, time, re
     
    ENV = "ac1"
    LOGIN = "henri"
    PSWD = "123456"
     
    class Jour01(unittest.TestCase):
        def setUp(self):
            global driver
            self.driver = webdriver.Chrome("C:\Selenium\chromedriver.exe")
            self.driver.implicitly_wait(60)
            self.base_url = "http://app-ac2.net/"
            self.verificationErrors = []
            self.accept_next_alert = True
     
        def Test_001(self):
            driver=self.driver
            driver.maximize_window
            self.driver.get("http://app-" + ENV + ".net/initApplication.do")
     
            driver.find_element_by_id("userId").clear()
            driver.find_element_by_id("userId").send_keys(LOGIN)
            driver.find_element_by_id("password").clear()
            driver.find_element_by_id("password").send_keys(PSWD)
            driver.find_element_by_css_selector("input.btnSmall").click()
     
        def Test_002(self):		
            driver.find_element_by_link_text("Contacts").click()
     
            driver.find_element_by_xpath("//*[@id='zoom']/div[3]/div[1]/ul/li[div//span[@title='Belgique']]/div/i").click()
            for i in range(60):
                try:
                    if u"RÉGIONS" == driver.find_element_by_css_selector("div.zoom-header.ng-binding").text: break
                except: pass
                time.sleep(1)
            else: self.fail("time out")
     
    ## (...)
     
     
        def is_element_present(self, how, what):
            try: self.driver.find_element(by=how, value=what)
            except NoSuchElementException, e: return False
            return True
     
        def is_alert_present(self):
            try: self.driver.switch_to_alert()
            except NoAlertPresentException, e: return False
            return True
     
        def close_alert_and_get_its_text(self):
            try:
                alert = self.driver.switch_to_alert()
                alert_text = alert.text
                if self.accept_next_alert:
                    alert.accept()
                else:
                    alert.dismiss()
                return alert_text
            finally: self.accept_next_alert = True
     
        def tearDown(self):
            self.driver.quit()
            self.assertEqual([], self.verificationErrors)
     
    if __name__ == "__main__":
        unittest.main()

  2. #2
    Expert éminent

    Homme Profil pro
    Inscrit en
    Octobre 2008
    Messages
    4 301
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2008
    Messages : 4 301
    Points : 6 781
    Points
    6 781
    Par défaut
    Salut,

    Juste un détail qui me frappe, pourquoi dans Test_002() driver ne lève-t-il pas une erreur ? Ce devrait-être self.driver.

    Et, peut-être que cela permettra de poursuivre le test avec la même instance de browser.

  3. #3
    Candidat au Club
    Homme Profil pro
    Inscrit en
    Janvier 2012
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2012
    Messages : 4
    Points : 4
    Points
    4
    Par défaut Sorry ...
    Désolé, je ne l'ai pas précisé, mais le code que j'ai mis est une des possibilités que j'ai essayées sans succès:

    J'ai déjà tenté:
    - avec et sans la ligne "driver = self.driver" dans le Test_002
    - en mettant driver en variable utilisée en comme "global" dans les def:
    - en créant une procédure qui appelle les différents Test_...

    Et effectivement, la version qui marche dans un nouveau driver est celle avec la l'instruction "driver=self.driver" dans Test_002.

    Merci à vous

    Henri

Discussions similaires

  1. [Joomla!] Une seule bdd pour plusieurs sites
    Par Imp rusg dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 3
    Dernier message: 23/02/2009, 09h16
  2. Réponses: 3
    Dernier message: 06/02/2009, 15h22
  3. Réponses: 2
    Dernier message: 10/07/2007, 13h45
  4. Réponses: 7
    Dernier message: 01/02/2006, 15h49
  5. [C#] Une seule méthode pour plusieurs composants
    Par niPrM dans le forum Windows Forms
    Réponses: 8
    Dernier message: 01/06/2004, 14h41

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo