How to properly pass basic auth (every click) using Selenium and phantomjs webdriver

I run some unittests with Selenium Webdriver.

I have a whole test that runs successfully using webdriver.Firefox (), here is the setup:

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 

The test succeeds, however I need to manually enter basic auth several times to keep the test moving forward.

In an attempt to bypass basic auth and completely automate the entire test, I switched from Firefox to phantomjs, as it seems like you can switch to Basic Auth with every click of the mouse ()

Here is my setup after switching to 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 

But I get the following error:

 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"}} 

I'm not sure if this error is just the difference between phantomjs and firefox, or if I just pass auth incorrectly.

+5
source share
1 answer

Here is a way to determine the basic authentication token in the headers using PhantomJS and Selenium:

 from selenium import webdriver from selenium.webdriver.common.desired_capabilities import DesiredCapabilities import base64 authentication_token = "Basic " + base64.b64encode(b'username:password') capa = DesiredCapabilities.PHANTOMJS capa['phantomjs.page.customHeaders.Authorization'] = authentication_token driver = webdriver.PhantomJS(desired_capabilities=capa) driver.get("http://...") 
+4
source

All Articles