Forum Testowania i AutomatyzacjiKategoria: PytanieProblem z uruchomieniem testów po modyfikacji
AvatarŁukasz Błaszkowski zapytał 6 lat temu

Witam, mam problem z uruchomieniem testów. Jak mam tak w kodzie:

def test_dodanie_do_Koszyka(self):
    driver = self.driver
driver.find_element_by_css_selector("div:nth-child(1)>div:nth-child(1)>div>div>div>input").click() driver.find_element_by_css_selector("div:nth-child(1)>div:nth-child(1)>div>div>div>input").clear() driver.find_element_by_css_selector("div:nth-child(1)>div:nth-child(1)>div>div>div>input").send_keys("3") driver.find_element_by_xpath("//button[@data-product-name='Okulary']").click() driver.find_element_by_css_selector("div:nth-child(1)>div:nth-child(2)>div>div>div>input").click() driver.find_element_by_css_selector("div:nth-child(1)>div:nth-child(2)>div>div>div>input").clear() driver.find_element_by_css_selector("div:nth-child(1)>div:nth-child(2)>div>div>div>input").send_keys("2") driver.find_element_by_xpath("//button[@data-product-price='39.22']").click()

to test uruchamia się. A jak zostanie zmodyfikowany na taki sposób:  

def test_dodanie_do_Koszyka(self):
    driver = self.driver
    okulary = driver.find_element_by_css_selector(\"div:nth-child(1)>div:nth-child(1)>div>div>div>input\").click()
    okulary.clear()
    okulary.send_keys(\"3\")
    driver.find_element_by_xpath(\"//button[@data-product-name=\'Okulary\']\").click()
    pilka = driver.find_element_by_css_selector(\"div:nth-child(1)>div:nth-child(2)>div>div>div>input\").click()
    pilka.clear()
    pilka.send_keys(\"2\")
    driver.find_element_by_xpath(\"//button[@data-product-price=\'39.22\']\").click()

 to już nie uruchamia się .W screen jest pokazany błąd: https://imgur.com/a/uew2xu2
Na screenie jest pokazane, że jest problem z  clear. Tylko ja nie wiem co jest nie tak.   Mała pomoc ?  
Pozdrawiam
ps. Tu jest link do github: https://github.com/lblaszkowski/ASTA

2 odpowiedzi
AvatarŁukasz Błaszkowski odpowiedział 6 lat temu

ja już miałem:
def test_dodanie_do_koszyka(self):
driver = self.driver
okulary = driver.find_element_by_css_selector(“div:nth-child(1)>div:nth-child(1)>div>div>div>input”).click()
okulary.clear()
okulary.send_keys(“3”)
driver.find_element_by_xpath(“//button[@data-product-name=’Okulary’]”).click():(
i wyskakuje mi ten błąd:
AttributeError: ‘NoneType’ object has no attribute ‘clear’
I nie wiem jak to rozwiązać, ponieważ pierwszy raz z tym spotykam się

Krzysiek KijasKrzysiek Kijas Personel odpowiedział 6 lat temu

Hej,
Tak, dlatego problem leży w linii:

okulary = driver.find_element_by_css_selector(“div:nth-child(1)>div:nth-child(1)>div>div>div>input”).click()

W tym momencie do zmiennej okulary ląduje wynik działania metody .click(), który ma wartość None.
Jeśli teraz na zmiennej okulary (która ma wartość None), spróbujemy wywołać metodę .click(), to dostaniemy właśnie powyższy błąd:

AttributeError: ‘NoneType’ object has no attribute ‘clear’

Mozna to naprawić w ten sposób – czyli click wywołujemy na tym co nam znajdzie metoda find_element_by_css_selector:

driver.find_element_by_css_selector(“div:nth-child(1)>div:nth-child(1)>div>div>div>input”).click()
driver.find_element_by_css_selector(“div:nth-child(1)>div:nth-child(1)>div>div>div>input”).clear()

Albo poprzez znalezienie elementu strony za pomocą metody find_element_by_css_selector, przypisanie elementu do zmiennej a nastepnie wykonanie na niej kolejno metody click() i clear():

okulary = driver.find_element_by_css_selector(“div:nth-child(1)>div:nth-child(1)>div>div>div>input”)
okulary.click()
okulary.clear()
AvatarŁukasz Błaszkowski odpowiedział 6 lat temu

ok. działa Wielkie dzięki za pomoc 🙂