Cześć,
Mam problem z porównaniem tytułu strony poprzez: assert.
driver.get('https://demobank.jaktestowac.pl/konta.html') driver.get('https://demobank.jaktestowac.pl/logowanie_etap_1.html') title = driver.title assert 'Demobank - Bankowość Internetowa - Logowanie' == title assert 'Demobank – Bankowość Internetowa – Konta' == title
W obu przypadkach test startuje, uruchamia się przeglądarka – ładuje odpowiednią stronę po czym dostaję
komunikat: assert ‘Demobank – Bankowość Internetowa – Konta’ == title
AssertionError.
Proszę o pomoc.
W przypadku tego kodu wszystko się zgadza 😉
Najpierw otwierana jest strona z kontem, później strona z logowaniem. Ze strony z logowaniem odczytywany jest tytuł (który ląduje w zmiennej title). Teraz pierwsza asercja się powiedzie, bo w zmiennej title
jest tytuł strony logowania, natomiast asercja z ‘Demobank – Bankowość Internetowa – Konta’ już nie. Po prostu za duzo jest odczytywane i sprawdzane na raz 🙂
Poniższy kod zadziała:
driver.get('https://demobank.jaktestowac.pl/logowanie_etap_1.html') title = driver.title assert 'Demobank - Bankowość Internetowa - Logowanie' == title driver.get('https://demobank.jaktestowac.pl/konta.html') title = driver.title assert 'Demobank – Bankowość Internetowa – Konta' == title
Dodatkowo dobrym pomysłem jest dodanie do asercji dodatkowej informacji, która zostanie wyświetlona w przypadku błędu:
driver.get('https://demobank.jaktestowac.pl/logowanie_etap_1.html') title = driver.title assert 'Demobank - Bankowość Internetowa - Logowanie' == title, f'Actual page title: {title}'
lub można dorzucić prosty print
aby sprawdzić co przechowuje dana zmienna:
driver.get('https://demobank.jaktestowac.pl/logowanie_etap_1.html') title = driver.title print('The title for first assertion:') print(title) assert 'Demobank - Bankowość Internetowa - Logowanie' == title driver.get('https://demobank.jaktestowac.pl/konta.html') title = driver.title print('The title for second assertion:') print(title) assert 'Demobank – Bankowość Internetowa – Konta' == title
Daj znać czy to pomogło 🙂
Zakładam, ze spodziewamy się, ze test przejdzie, ale niestety dzieje się inaczej 😉
Pierwsza rzecz, jaka mi się nasunęła to, że jest coś nie tak z formatowaniem znaku “-” – możliwe, ze zawiodło przyklejanie tutaj na forum. Gdy odpaliłem ten fragment kodu i porównałem wyświetlony tytuł z oczekiwanym, to okazało się, ze znak “-” znakowi “–” nie równy 😀 Na stronie występuje https://www.thepunctuationguide.com/hyphen.html, natomiast my oczekujemy https://www.thepunctuationguide.com/en-dash.html .
Porównaj proszę u siebie tytuły i napisz czy to ten problem 😉
Witam,
Tak to jest jak człowiek się spieszy 🙂
Wrzuciłem bezsensu pomieszany kod. Chodziło mi o dwa powyższe przypadki dla których dostaję ten sam błąd.
Tzn mój skrypt wygląda tak:
#!/usr/bin/env python
# -*- coding: utf-8 -*-
#Lekcja z tytułem strony:
from selenium import webdriver
driver = webdriver.Chrome (‘F:\Kamil\chromedriver\chromedriver’)
driver.get(‘https://demobank.jaktestowac.pl/logowanie_etap_1.html’)
title=driver.title
print(title)
assert ‘Demobank – Bankowość Internetowa – Logowanie’ == title
driver.quit()
W odpowiedzi dostaję:
C:\Python27\python.exe C:/Users/Komputer/PycharmProjects/Testy/JakTestowac.py
C:/Users/Komputer/PycharmProjects/Testy/JakTestowac.py:10: UnicodeWarning: Unicode equal comparison failed to convert both arguments to Unicode – interpreting them as being unequal
Demobank – Bankowość Internetowa – Logowanie
assert ‘Demobank – Bankowość Internetowa – Logowanie’ == title
Traceback (most recent call last):
File “C:/Users/Komputer/PycharmProjects/Testy/JakTestowac.py”, line 10, in
assert ‘Demobank – Bankowość Internetowa – Logowanie’ == title
AssertionError
To dotyczy wszystkich tytułów dla których wykonywałem aserację. To samo dzieję się po uruchomieniu kodu od Ciebie.
Na szybko – dodaj u
przed stringiem oczekiwanym czyli u'Demobank – Bankowość Internetowa – Logowanie'
i zadziała 😀
Dlaczego?
Dla kodu:
#!/usr/bin/env python # -*- coding: utf-8 -*- #Lekcja z tytułem strony: from selenium import webdriver driver = webdriver.Chrome ('F:\Kamil\chromedriver\chromedriver') driver.get('https://demobank.jaktestowac.pl/logowanie_etap_1.html') title=driver.title print(title) assert 'Demobank – Bankowość Internetowa – Logowanie' == title driver.quit()
i błędu
Testy/JakTestowac.py:10: UnicodeWarning: Unicode equal comparison failed to convert both arguments to Unicode – interpreting them as being unequal Demobank – Bankowość Internetowa – Logowanie assert 'Demobank – Bankowość Internetowa – Logowanie' == title Traceback (most recent call last): File 'C:/Users/Komputer/PycharmProjects/Testy/JakTestowac.py', line 10, in assert 'Demobank – Bankowość Internetowa – Logowanie' == title AssertionError
Widać, że chodzi o porównanie typu string
z typem unicode
.
Czyli, któraś z wartości jest innego typu jak to sprawdzić? Uprościłem kod aby było łatwiej.
W naszym przypadku wartość dla title
jest zwracana jako unicode
i dlatego wymusiłem taką wartość dodając u
przed stringiem.
#!/usr/bin/env python # -*- coding: utf-8 -*- title=u'Demobank – Bankowość Internetowa – Logowanie' print(title) print('Typ obiektu title: ' + type(title)) expected = 'Demobank – Bankowość Internetowa – Logowanie' print('Typ obiektu expected', type(expected)) assert expected == title
No i mamy winnego – title
jest innego typu niż to czego oczekujemy. No i mamy błąd bo Python nie chce porównać różnych obiektów 😀
Co zrobić? Trzeba je ujednolicić:
Albo zrobić z naszego title
stringa tak:
title = title.encode('utf-8') print('Typ obiektu title', type(title)) assert 'Demobank – Bankowość Internetowa – Logowanie' == title
Albo naszą wartość oczekiwaną zrobić też typu unicode
expected = u'Demobank – Bankowość Internetowa – Logowanie' print('Typ obiektu expected', type(expected)) assert expected == title
Czyli finalnie dla twojego kodu wystarczy tylko dodać u
w tym miejscu:
assert u'Demobank – Bankowość Internetowa – Logowanie' == title
Na koniec gorąco zachęcam do przejścia na pythona3 to mega ułatwi Ci życie – no i wiesz nowsze w IT jest zawsze lepsze 😉 Jeśli masz Ubuntu w wersji 17.10 lub wyższej to masz go już zaistalowanego a jak nie masz to śmiało instaluj i ustaw w swoim IDE tę wersję.
Miłych eksperymentów i testowania!