我成功地在仿真器上设置了androiddriver,但我正在努力解决httplib错误。以下是我在mac上设置android sdk后采取的步骤。
1. ./adb devices, which returned emulator-5554
2. ./adb emulator-5554 -s forward tcp:8080 tcp:8080
3. visited http://localhost:8080/wd/hub/status in my browser and received a { status: 0 }
4. In the python shell (tried this on both python 2.7 & 2.6), I did:
>> from selenium import webdriver
>> from selenium.webdriver.common.desired_capabilities import DesiredCapabilities
>> driver = webdriver.Remote("http://localhost:8080/wd/hub", webdriver.DesiredCapabilities.ANDROID)
>> driver.get("http://www.google.com")有时,当我设置驱动程序变量时,我会得到错误(如下所示),有时则不会。driver.get命令也是如此。
堆栈跟踪如下:
File "<stdin>", line 1, in <module>
File "/Library/Python/2.7/site-packages/selenium/webdriver/remote/webdriver.py", line 177, in get
self.execute(Command.GET, {'url': url})
File "/Library/Python/2.7/site-packages/selenium/webdriver/remote/webdriver.py", line 163, in execute
response = self.command_executor.execute(driver_command, params)
File "/Library/Python/2.7/site-packages/selenium/webdriver/remote/remote_connection.py", line 349, in execute
return self._request(url, method=command_info[0], data=data)
File "/Library/Python/2.7/site-packages/selenium/webdriver/remote/remote_connection.py", line 396, in _request
response = opener.open(request)
File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/urllib2.py", line 394, in open
response = self._open(req, data)
File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/urllib2.py", line 412, in _open
'_open', req)
File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/urllib2.py", line 372, in _call_chain
result = func(*args)
File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/urllib2.py", line 1199, in http_open
return self.do_open(httplib.HTTPConnection, req)
File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/urllib2.py", line 1170, in do_open
r = h.getresponse(buffering=True)
File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/httplib.py", line 1027, in getresponse
response.begin()
File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/httplib.py", line 407, in begin
version, status, reason = self._read_status()
File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/httplib.py", line 371, in _read_status
raise BadStatusLine(line)
httplib.BadStatusLine: ''其他人有解决这个问题的办法吗?
发布于 2013-10-30 22:10:24
正如您所说,这个问题已经在android服务器的newer version中修复了。然而,对于那些不能更新的人:这是由于驱动程序假设页面已经过早地加载到实际加载的页面。Selenium从驱动程序接收一些HTTP标头,并且状态行无效。例如,
状态行是空白的,而不是HTTP/1.0 200 (如上所述)。
我发现解决这个问题的一种方法是等待一段足够长的时间,假设页面已经加载,然后尝试建立连接。
我通常会得到下面这行代码的异常:
android = webdriver.Remote(command_executor='http://127.0.0.1:8080/wd/hub', desired_capabilities=capabilities.ANDROID)因此,为了解决这个问题,我只修改了代码,让它等待调用成功:
android = None
while android is None:
try:
android = webdriver.Remote(command_executor='http://127.0.0.1:8080/wd/hub', desired_capabilities=capabilities.ANDROID)
except:
time.sleep(1)
pass请注意,在我将save_screenshot和BadStatusLine从2.3.2APK降级到2.2.1APK之前,我仍然存在问题
https://stackoverflow.com/questions/16220896
复制相似问题