Używam kilku prób z Selenium Webdriver.Jak poprawnie przejść podstawowe uwierzytelnianie (każde kliknięcie) za pomocą Selenium i phantomjs webdriver
Mam cały test, który działa skutecznie przy użyciu webdriver.Firefox(), oto konfiguracja:
def setUp(self):
self.driver = webdriver.Firefox()
self.driver.implicitly_wait(30)
self.base_url = "http://www.nike.com"
self.verificationErrors = []
self.accept_next_alert = True
Test przebiega pomyślnie, jednak muszę ręcznie wpisać w podstawowych auth wiele razy do testu aby iść do przodu.
W próbie ominięcia podstawowego uwierzytelniania i mają całe badanie prawdziwie zautomatyzowany, mam włączony od Firefoksa phantomjs, jak to brzmi jak można przekazać Basic Auth z każdego kliknięcia()
Oto moja konfiguracja po włączeniu do phantomjs:
def setUp(self):
dcap = dict(DesiredCapabilities.PHANTOMJS)
dcap["phantoms.page.settings.userName"] = ("testuser")
dcap["phantoms.page.settings.userPassword"] = ("testpass")
self.driver = webdriver.PhantomJS(desired_capabilities=dcap, service_args=['--ignore-ssl-errors=true'])
self.driver.implicitly_wait(30)
self.base_url = "http://www.nike.com
self.verificationErrors = []
self.accept_next_alert = True
ale pojawia się następujący błąd:
NoSuchElementException: Message: {"errorMessage":"Unable to find
element with xpath '(//button[@type='button'])[2]'","request":
{"headers":{"Accept":"application/json","Accept-Encoding":"identity",
"Connection":"close","Content-Length":"113","Content- Type":"application/json;charset=UTF-8",
"Host":"127.0.0.1:58025","UserAgent":"Pythonurllib/2.7"},"httpVersion":"1.1",
"method":"POST","post":"{\"using\": \"xpath\", \"sessionId\": \"c2fa02e0-1df0-11e6-a2ad-c325e56df16d\",
\"value\": \"(//button[@type='button'][2]\"}","url":"/element","urlParsed":
{"anchor":"","query":"","file":"element","directory":"/","path":"/element","relative":"/element","port":"","host":"",
"password":"","user":"","userInfo":"","authority":"","protocol":"","source":"/element","queryKey":{},"chunks":
["element"]},"urlOriginal":"/session/c2fa02e0-1df0-11e6-a2ad-c325e56df16d/element"}}
nie jestem pewien, czy ten błąd jest tylko różnica między phantomjs i firefox, lub jeśli właśnie przekazuję auth niepoprawnie.
Dzięki, to następnie przekazać authentication_token na każdym kolejnym kliknięciem? – david
Tak, jeśli kliknięcie jest linkiem do nowej strony, ale nie jestem pewien, czy jest to połączenie Ajax. –
Zaakceptowałem twoją odpowiedź, ale to nie rozwiązało mojego problemu, ponieważ podstawowe żądanie jest wymagane od wielu hostów (zawartość osadzona na stronie wymaga własnego podstawowego uwierzytelnienia). Nie jestem pewien, że istnieje sposób przekazywania poświadczeń do wielu hostów w ten sposób przy użyciu Selenium, myślałem, że phantomjs zaoferuje obejście, ale nie sądzę. – david