我正在使用Selenium Webdriver运行一些单元测试。
我有一个使用webdriver.Firefox()成功运行的完整测试,这里是设置:
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
测试运行成功,但我必须多次手动输入基本身份验证才能继续前进。
为了绕过基本身份验证并让整个测试真正自动化,我已经从Firefox切换到phantomjs,因为听起来你可以通过每次点击传递Basic Auth()
切换到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
但是我收到以下错误:
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"}}
我不确定这个错误是否只是phantomjs和firefox之间的区别,或者我只是错误地传递了auth。
答案 0 :(得分:4)
以下是使用PhantomJS和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://...")