Używam testów selvra webdrivera z próbami od nosa. Chcę przechwycić zrzut ekranu, gdy nieudane testy nosa. Jak mogę to zrobić w najbardziej efektywny sposób, korzystając z funkcji webdriver, python lub nosetests?Jak przechwycić zrzut ekranu, jeśli moje niepowodzenia testów nie powiodą się?
Odpowiedz
W Pythonie można skorzystać z poniższego kodu:
driver.save_screenshot('/file/screenshot.png')
Przede wszystkim webdriver ma polecenie:
driver.get_screenshot_as_file(screenshot_file_path)
nie jestem ekspertem w nosie (w rzeczywistości jest to po raz pierwszy Zajrzałem do tego), jednak używam ramy py.test
(która jest podobna, ale lepsza niż IMUO nose
).
Najprawdopodobniej będziesz musiał stworzyć "plugin" dla nosa, w którym będziesz musiał zaimplementować haczyk addFailure(test, err)
, który jest "wywoływany, gdy test się nie powiedzie".
W tym addFailure(test, err)
można uzyskać nazwę testu od Test object i wygenerować ścieżkę do pliku.
Po tym połączeniu driver.get_screenshot_as_file(screenshot_file_path)
.
W py.test
Tworzę wtyczkę z implementacją haka def pytest_runtest_makereport(item, call):
. Wewnątrz analizuję call.excinfo
i jeśli to konieczne, tworzę zrzut ekranu.
Próbowałem tego, ale nie mogę dostać instancji TestCase w addFailure(). Czy możesz podzielić się tym, jak to jest możliwe (po prostu znając nazwę testu, która wskazuje mi tylko odpowiednią klasę, a nie instancję)? – vvondra
Moje rozwiązanie
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()
Pytanie dotyczy struktury 'nose', a nie domyślnej' unittest'. –
"przy użyciu funkcji webdriver, python lub nosetests" –
Nie sądzę, że "python" oznacza "używanie innego frameworka (takiego jak unittest)", jednak mogę się mylić. –
Być może skonfigurować testy inaczej, ale z mojego doświadczenia trzeba ręcznie zbudować tego typu funkcjonalności i powtórzyć go w miejscu awarii. Jeśli wykonujesz testy selenowe, prawdopodobnie tak jak ja, używasz dużo find_element_by_ coś, co. Pisałem następującą funkcję, aby umożliwić mi do rozwiązania tego typu rzeczy:
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)
W twoim przypadku, kod ekranu (self.driver.get_screenshot_as_file (screenshot_file_path)) pójdzie przed self.fail.
Z tym kodem, za każdym razem, gdy chcesz interakcji z elementem, nazwałbyś self.findelement („”, „selektor element name”)
- 1. jak zrobić zrzut ekranu?
- 2. Opóźnienie zrzut ekranu iOS
- 3. Jak programować zrzut ekranu?
- 4. Zrzut ekranu ignoruje niektóre okna
- 5. Zrzut ekranu w Haskell?
- 6. Dlaczego moje "jeśli" nie wydaje się uruchomić?
- 7. Android wykonuje zrzut ekranu
- 8. Zrzut ekranu pokazuje czarny
- 9. Karma: Powiadomienia systemowe, gdy testy zakończą się lub nie powiodą
- 10. Jak przechwycić bieżący zrzut ekranu i użyć go ponownie w kodzie? (iPhone SDK)
- 11. Jak wykonać zrzut ekranu renderowanej strony HTML?
- 12. Uzyskaj zrzut ekranu określonej aplikacji
- 13. jak przechwycić zrzut ekranu w html za pomocą jQuery js lub
- 14. Uzyskaj zrzut ekranu kontrolki przeglądarki?
- 15. Zrzut ekranu okna z pytonem:
- 16. Jak zrobić zrzut ekranu z części UIView?
- 17. Jak wyświetlić "Zrzut ekranu: dostępny przez ekran"?
- 18. Jak wziąć zrzut ekranu Qt/QML
- 19. Jak programowo wykonać zrzut ekranu (Swift, SpriteKit)
- 20. Zrzut ekranu Firebase Query zero?
- 21. iPad 3 powolny zrzut ekranu
- 22. Zrzut ekranu z kamery internetowej
- 23. C#: jak zrobić zrzut części ekranu
- 24. Jak zrobić zrzut ekranu pod Waylandem?
- 25. Zrzut ekranu procesu w ramach usługi Windows
- 26. Aplikacja Qt MDI z OpenGL: jak pobrać prawidłowy zrzut ekranu?
- 27. Brakujący zrzut ekranu aplikacji na iOS
- 28. Pobierz zrzut ekranu ze strony ASP.Net
- 29. Zrzut ekranu Pythona 2+ monitorów (Windows)
- 30. Zrzut ekranu z animacją rdzenia na iPadzie
podobne, ale dla unittest: [Jak wykonać kod tylko na testuje awarie z python unittest2?] (http://stackoverflow.com/q/12290336/55075) na SO – kenorb