Sono in esecuzione test del selenio con nsetest. Voglio catturare uno screenshot quando falliscono i nosetest. Come posso farlo nel modo più efficace, utilizzando le funzionalità di webdriver, python o nosetests?Come posso acquisire uno screenshot se i miei nosetests falliscono?
risposta
In Python è possibile utilizzare il codice qui sotto:
driver.save_screenshot('/file/screenshot.png')
Prima di tutto, WebDriver ha il comando:
driver.get_screenshot_as_file(screenshot_file_path)
Io non sono un esperto nel naso (in realtà questa è la prima volta L'ho esaminato), tuttavia utilizzo il framework py.test
(che è simile, tuttavia superiore a nose
IMHO).
Molto probabilmente dovrai creare il "plugin" per il naso dove dovrai implementare il gancio addFailure(test, err)
che è "Chiamato quando un test fallisce".
In questo addFailure(test, err)
è possibile ottenere il nome del test da Test object e generare il percorso per il file.
Dopo quella chiamata driver.get_screenshot_as_file(screenshot_file_path)
.
In py.test
Creo il mio plug-in con l'implementazione del gancio def pytest_runtest_makereport(item, call):
. All'interno analizzo call.excinfo
e creo lo screenshot se necessario.
Ho provato questo, ma non riesco a ottenere l'istanza del TestCase in addFailure(). Puoi condividere come è possibile (solo conoscendo il nome del test, che indica solo la classe appropriata, non un'istanza) – vvondra
La mia soluzione
import sys, unittest
from datetime import datetime
class TestCase(unittest.TestCase):
def setUp(self):
some_code
def test_case(self):
blah-blah-blah
def tearDown(self):
if sys.exc_info()[0]: # Returns the info of exception being handled
fail_url = self.driver.current_url
print fail_url
now = datetime.now().strftime('%Y-%m-%d_%H-%M-%S-%f')
self.driver.get_screenshot_as_file('/path/to/file/%s.png' % now) # my tests work in parallel, so I need uniqe file names
fail_screenshot_url = 'http://debugtool/screenshots/%s.png' % now
print fail_screenshot_url
self.driver.quit()
La domanda riguarda il framework 'nose', non il predefinito' unittest'. –
"utilizzando le funzioni webdriver, python o nosetests" –
Non penso che "python" implichi "l'uso di un altro framework (come l'unittest)", tuttavia potrei sbagliarmi. –
Forse avete impostato i test in modo diverso, ma nella mia esperienza è necessario costruire manualmente in questo tipo di funzionalità e ripeterla al punto di errore. Se stai eseguendo test sul selenio, è probabile che tu stia usando un sacco di find_element_by_ qualcosa. Ho scritto la seguente funzione per permettermi di affrontare questo tipo di cosa:
def findelement(self, selector, name, keys='', click=False):
if keys:
try:
self.driver.find_element_by_css_selector(selector).send_keys(keys)
except NoSuchElementException:
self.fail("Tried to send %s into element %s but did not find the element." % (keys, name))
elif click:
try:
self.driver.find_element_by_css_selector(selector).click()
except NoSuchElementException:
self.fail("Tried to click element %s but did not find it." % name)
else:
try:
self.driver.find_element_by_css_selector(selector)
except NoSuchElementException:
self.fail("Expected to find element %s but did not find it." % name)
Nel tuo caso, il codice screenshot (self.driver.get_screenshot_as_file (screenshot_file_path)) sarebbe andato prima della self.fail.
Con questo codice, ogni volta che si desidera interagire con un elemento, si sarebbe chiamata self.findelement ('selector', 'nome dell'elemento')
- 1. Come acquisire uno screenshot utilizzando VBScript in TestComplete?
- 2. Google play mostra tutti i miei screenshot
- 3. Come mostrare i miei test che passano/falliscono in Github?
- 4. Perché i miei test OCUnit falliscono con "codice 138"?
- 5. Rileva uno screenshot Android
- 6. Android - Come acquisire gli screenshot a livello di programmazione
- 7. Come posso fare uno screenshot in un'applicazione Windows?
- 8. Ottiene automaticamente uno screenshot di una pagina
- 9. Come caricare uno screenshot usando html2canvas?
- 10. Codice JavaScript per acquisire uno screenshot di un sito Web senza utilizzare ActiveX
- 11. Come acquisire una parte di uno schermo
- 12. Come creare uno screenshot di un'area particolare?
- 13. Come posso resettare i miei contatori sidekiq?
- 14. come posso ingrandire i miei pulsanti
- 15. Come posso testare i miei metodi meteorologici?
- 16. Impossibile acquisire screenshot su Android utilizzando robotium e metodo privato
- 17. Come fare uno screenshot con FireMonkey (multipiattaforma)
- 18. Crea Android jenkins build fallito se i test falliscono
- 19. Ottenere uno screenshot di un'applicazione specifica
- 20. Ottenere uno screenshot da una pagina ASP.Net
- 21. È possibile fare uno screenshot dell'intera pagina con Selenium/Capybara?
- 22. Perché i miei processi di coda di laravel falliscono dopo 60 secondi?
- 23. Prendere uno screenshot con Silverlight 5/XNA
- 24. Come posso acquisire i pacchetti di rete per PID?
- 25. Come posso acquisire altKey + i, u, e, n con jQuery?
- 26. Perché la mia suite di test HUnit passa quando i miei test falliscono?
- 27. Come posso acquisire SIGINT in Python?
- 28. Come stampare l'XML di copertura con nosetests?
- 29. Tensorflow - Python: come posso utilizzare i miei dati con TensorFlow?
- 30. Come posso proteggere i miei assembly .NET dalla decompilazione?
simile, ma per unittest: [Come eseguire il codice solo su test fallimenti con python unittest2?] (http://stackoverflow.com/q/12290336/55075) a SO – kenorb