
We are searching data for your request:
Upon completion, a link will appear to access the found materials.
Šuo šaukia paimamas" />,
<,input type="submit" name="commit" value="Įsipareigoti" />,
<,/forma>,
<,/body>,
<,/html>,
Turiu šį test.py kodą, kuriam bandau atlikti kai kuriuos vieneto testus:
iš seleno importo žiniatinklio tvarkyklės
importo vieneto testas
klasė TestBrowserPage(unittest.TestCase):
def setUp (savarankiškai):
self.driver = žiniatinklio tvarkyklė.Firefox()
def test_home_page(self):
self.driver.get("http://localhost:8000")
self.driver.title patvirtinkite „Pagrindinio puslapio turinį“.
def test_sign_up(self):
self.driver.find_element_by_id("prisiregistravimo_įvestis")
self.driver.find_element_by_id("pateikti").click()
patvirtinkite "Registruotis kaip naujas vartotojas" self.driver.title
Kai paleidžiu testą, gaunu šią klaidą:
Failas "test.py", 22 eilutė, test_sign_up
self.driver.find_element_by_id("pateikti").click()
AttributeError: objektas „Puslapis“ neturi atributo „find_element_by_id“
Nesu tikras, kodėl gaunu klaidą, nes objektas „self.driver“ turėtų turėti „find_element_by_id“ metodą. Ar kas nors gali man padėti? Dėkoju.
A:
webdriver.Firefox() nepateikia puslapio objekto (arba tvarkyklės).
Šio Python seleno naujokas, bet atrodo, kad grąžinate žiniatinklio tvarkyklės objektą. Turėtum daryti
self.driver = žiniatinklio tvarkyklė.Firefox()
vietoj
self.driver = žiniatinklio tvarkyklė.Firefox()
Be to, jei jūsų puslapyje yra keli elementai su tuo pačiu ID, turėsite perjungti ID ieškiklį (kaip rodo @Rafael-Nieva atsakymas), todėl pabandykite:
self.driver.find_element_by_id("prisiregistravimo_įvestis")
self.driver.find_element_by_id("pateikti").click()
Be to, nenaudočiau „find_element_by_id“ visų elementų paieškai, nes yra didelė tikimybė, kad rinksite elementus kituose puslapiuose (pvz., mygtuką pateikti). Norėdami pasirinkti elementus, kurių ieškote, naudočiau ID arba xpath lokatorių, o tai reiškia, kad jūsų testas būtų šiek tiek kompaktiškesnis:
self.driver.find_element_by_id("registracijos_įvestis")
self.driver.find_element_by_id("pateikti")
A:
Pirmasis yra inicijuoti jį vieną kartą ir naudoti jį visiems metodams, ne tik atvirajam metodui. Antrasis yra kaip uždaryti tvarkyklę, nereikia skambinti "quit", nes webdriver objektas jį iškviečia pats
self.driver = žiniatinklio tvarkyklė.Firefox()
Ir savo klausimui galite tiesiog naudoti xpath:
self.driver.find_element_by_xpath('//input[@id="signup_input"]')
self.driver.find_element_by_xpath('//input[@id="pateikti"]')
Taip pat rekomenduočiau išbandyti „lxml“ biblioteką, kad rastumėte savo elementus, nes ją bus daug lengviau naudoti atliekant testus:
iš lxml importuoti html
klasė Mano_puslapis:
def init (savaime):
self.driver = žiniatinklio tvarkyklė.Firefox()
self.driver.implicitly_wait(10)
self.elements = []
def open_my_page(self):
html = self.driver.get("URL")
bandyti:
elementai = html.xpath("//input[@id='signup_input']")
išskyrus:
elementai = html.xpath("//input[@id='submit']")
self.elements.extend(elements)
def close_driver(self):
self.driver.quit()
def get_number_of_elements(self):
grąžinti objektyvą (sav. elementai)
Pavyzdys
Demonstravimo tikslais naudosime paprastą bandomąjį scenarijų:
iš selenium.webdriver.support importuoti laukiamos sąlygos kaip EC
iš seleno importo žiniatinklio tvarkyklės
iš „My_Page“ importuokite „Mano_puslapis“.
driver = webdriver.Firefox()
puslapis = Mano_puslapis()
print(page.get_number_of_elements())
print(page.get_number_of_elements())
driver.implicitly_wait(10)
bandyti:
driver.find_element_by_id("pateikti").click()
# Nepamirškite patikrinti, ar pateikimas buvo geras, ar klaida
print ("Užklausa buvo sėkminga")
pagaliau:
driver.quit()
Kai paleidžiama:
Python 3.6.3 (v3.6.3:2c38245b, 2018 m. birželio 27 d., 18:09:55) [MSC v.1900 32 bitų (Intel)] sistemoje win32
14
[pagrindinis] INFO:root:Užklausa buvo sėkminga
Ir kitame terminale:
Traceback (paskutinis skambutis):
Failas „C:UsersuserDesktop estingMy_Page.py“, 12 eilutė, <,module>,
puslapis = Mano_puslapis()
Failas "C:UsersuserDesktop estingMy_Page.py", 5 eilutė, init
self.driver.implicitly_wait(10)
Failas „C:Python36libsite-packagesseleniumwebdriver emotewebdriver.py“, 339 eilutė, esantis implicitly_wait
self.execute(Command.BEFORE_