2016-05-20 7 views
3

Hintergrund:Wie Methode bei jedem py.test Assertion Fehler aufrufen?

Ich benutze py.test zusammen mit Pytest-Selen, jetzt möchte ich einen Screenshot der Seite machen, wenn Assertion fehlschlägt.

Zur Zeit habe ich definiere kleine Helfer-Methode in meiner Basisseite Objektklasse:

class PageBase(object): 
    def __init__(self,driver): 
     self.driver = driver 
     self.fake = Factory.create() 

    def screenshot(self,name): 
     self.driver.save_screenshot(datetime.now().strftime('%Y-%m-%d %H:%M:%S') + 'scr_'+name+'.png') 

    @contextmanager 
    def wait_for_page_load(self, timeout=45): 
     old_page = self.driver.find_element_by_tag_name('html') 
     yield 
     WebDriverWait(self.driver, timeout).until(
      EC.staleness_of(old_page) 
     ) 

Das Problem ist, dass ich es anstelle von „manuell“ Nutzung automatisierten Mechanismus machen möchte: (Testklasse Beispiel) :

class TestLogin: 
    @allure.feature('Ability to login into admin panel') 
    def test_admin_login(self, prepare, page): 

     print URLMap.admin('test') 
     driver = prepare 
     driver.get(URLMap.admin(page)) 

     login_page = LoginPage(driver) 
     assert login_page.is_page_correct(),'Login page not loaded correctly' 

     login_page.fill_login_data('testadmin','testadmin') 
     login_page.click_login_button() 
     assert login_page.is_user_logged_in(),'User cannot log in with provided credentials' 
     login_page.screenshot(page+'_logged_in') 

Wie bestimmte Methode für jeden Assertionsfehler ausgeführt wird?

+0

Sie aussehen könnte in Die Haken für Plugins: https://pytest.org/latest/writing_plugins.html – jonrsharpe

+0

Was Sie brauchen, ist ein @ AfterMethod. Bei dieser Methode können Sie überprüfen, ob Ihr Test fehlgeschlagen ist oder nicht und einen Screenshot erstellen. – RemcoW

Antwort

-1

Ich denke, dass screenShotInSelenium Seite Ihnen genug Informationen geben sollte, wie Sie einen Screenshot erstellen, wenn eine Assert-Bedingung erfüllt ist.

Was Ihnen fehlt, ist die Verwendung von @AfterMethod