Informacja

Pies skowyczy, gdy zostanie podniesiony

Pies skowyczy, gdy zostanie podniesiony



We are searching data for your request:

Forums and discussions:
Manuals and reference books:
Data from registers:
Wait the end of the search in all databases.
Upon completion, a link will appear to access the found materials.

Pies skowyczy, gdy zostanie podniesiony" />,

<,input type="prześlij" name="zatwierdź" value="zatwierdź" />,

</formularz>,

<,/treść>,

<,/html>,

Mam następujący kod test.py, w którym próbuję umieścić kilka testów jednostkowych:

z selen importu webdriver

importuj test jednostkowy

class TestBrowserPage(test jednostki.TestCase):

def konfiguracja (własna):

self.driver = webdriver.Firefox()

def test_home_page(self):

self.driver.get("http://localhost:8000")

asercja „Zawartość strony głównej” w self.driver.title

def test_sign_up(self):

self.driver.find_element_by_id("signup_input")

self.driver.find_element_by_id("prześlij").click()

asercja „Zarejestruj się jako nowy użytkownik” w self.driver.title

Po uruchomieniu testu pojawia się następujący błąd:

Plik "test.py", wiersz 22, w test_sign_up

self.driver.find_element_by_id("prześlij").click()

AttributeError: Obiekt „Page” nie ma atrybutu „find_element_by_id”

Nie jestem pewien, dlaczego otrzymuję błąd, ponieważ obiekt „self.driver” powinien mieć metodę „find_element_by_id”. Czy ktoś może mi pomóc? Dziękuję.

A:

webdriver.Firefox() nie zwraca obiektu Page (lub sterownika).

Jestem nowy w tym selenu Pythona, ale wygląda na to, że zwracasz obiekt webdriver. Powinieneś robić

self.driver = webdriver.Firefox()

zamiast

self.driver = webdriver.Firefox()

Ponadto, jeśli Twoja strona zawiera kilka elementów o tym samym identyfikatorze, musisz przełączyć się na lokalizator identyfikatorów (jak pokazuje odpowiedź @Rafael-Nieva), więc spróbuj:

self.driver.find_element_by_id("signup_input")

self.driver.find_element_by_id("prześlij").click()

Nie używałbym również „find_element_by_id” do wyszukiwania wszystkich elementów, ponieważ istnieje duża szansa, że ​​wybierzesz elementy na innych stronach (np. przycisk przesyłania). Do wybrania elementów, których szukasz, użyłbym albo lokalizatora id, albo lokalizatora xpath, co oznacza, że ​​twój test byłby nieco bardziej zwarty:

self.driver.find_element_by_id("signup_input")

self.driver.find_element_by_id("prześlij")

A:

Pierwszym z nich jest jednorazowe zainicjowanie i użycie do wszystkich metod, nie tylko otwartej. Drugi to sposób zamknięcia sterownika, nie trzeba wywoływać "quit", ponieważ obiekt webdriver sam go wywołuje

self.driver = webdriver.Firefox()

A na swoje pytanie możesz po prostu użyć xpath:

self.driver.find_element_by_xpath('//input[@id="signup_input"]')

self.driver.find_element_by_xpath('//input[@id="wyślij"]')

Polecam również wypróbowanie biblioteki "lxml", aby znaleźć swoje elementy, ponieważ będzie ona znacznie łatwiejsza w użyciu w testach:

z lxml import html

klasa Moja_Strona:

def init (samo):

self.driver = webdriver.Firefox()

self.driver.implicitly_wait(10)

self.elementy = []

def open_my_page(self):

html = self.driver.get("URL")

próbować:

elementy = html.xpath("//input[@id='signup_input']")

z wyjątkiem:

elementy = html.xpath("//input[@id='prześlij']")

self.elements.extend(elementy)

def close_driver(self):

własny.sterownik.zakończ()

def pobierz_liczbę_elementów(własne):

return len(self.elements)

Przykład

W celach demonstracyjnych użyjemy prostego skryptu testowego:

z selen.webdriver.support importuj oczekiwane_warunki jako EC

z selen importu webdriver

z Moja_Strona importuj Moja_Strona

sterownik = webdriver.Firefox()

strona = Moja_Strona()

drukuj(strona.get_liczba_elementów())

drukuj(strona.get_liczba_elementów())

driver.implicitly_wait(10)

próbować:

driver.find_element_by_id("prześlij").click()

# Nie zapomnij sprawdzić, czy zgłoszenie było w porządku lub błąd

print("Żądanie powiodło się")

wreszcie:

sterownik.zakończ()

Po uruchomieniu:

Python 3.6.3 (v3.6.3:2c38245b, 27 czerwca 2018, 18:09:55) [MSC v.1900 32 bit (Intel)] na win32

14

[główne] INFO: root: Żądanie powiodło się

A na innym terminalu:

Traceback (ostatnie ostatnie połączenie):

Plik „C:UsersuserDesktop estingMy_Page.py”, wiersz 12, w <,module>,

strona = Moja_Strona()

Plik "C:UsersuserDesktop estingMy_Page.py", wiersz 5, init

self.driver.implicitly_wait(10)

Plik „C:Python36libsite-packagesseleniumwebdriver emotewebdriver.py”, wiersz 339, w implicitly_wait

self.execute(Polecenie.PRZED_


Video, Sitemap-Video, Sitemap-Videos