【发布时间】:2018-06-13 06:06:30
【问题描述】:
我是 Python 新手,我正在尝试从 robotsframework 修改 SeleniumLibrary 以满足我自己的需求。不幸的是,我遇到了多个错误,我不知道为什么。
有多种函数可以通过二进制路径和无头选项调用不同的浏览器。
import os
from selenium import webdriver
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.common.desired_capabilities import DesiredCapabilities
DEFAULT_BROWSR = 'chrome'
DRIVERS_PATH = os.path.join( os.getcwd() , "\drivers\\" )
BROWSER_NAMES = {
'ff': "_make_ff",
'firefox': "_make_ff",
'headlessfirefox': '_make_headless_ff',
'gc': "_make_chrome",
'googlechrome': "_make_chrome",
'headlesschrome': '_make_headless_chrome',
'chrome': "_make_chrome",
}
BROWSER_PATHS = {
'_make_ff': "geckodriver-win32\geckodriver.exe",
'_make_headless_ff': "geckodriver-win32\geckodriver.exe",
'_make_chrome': "chromedriver_win32\chromedriver.exe",
'_make_headless_chrome': "chromedriver_win32\chromedriver.exe",
}
class driver(object):
"""docstring for driver"""
def __init__(self):
self.driver = None
self.driver_path = None
self.timeout = 20
self.implicit_wait = 5
def create(self,browser_name=DEFAULT_BROWSR):
return self._make_driver(browser_name)
def _make_driver(self, browser_name, desired_capabilities=None, profile_dir=None, remote=None):
creation_func = self._get_driver_creation_function(browser_name)
driver_path = self._get_driver_path(browser_name)
desired_capabilities = {"chrome.binary": driver_path,}
driver = creation_func(remote, desired_capabilities, profile_dir)
driver.set_script_timeout(self.timeout)
driver.implicitly_wait(self.implicit_wait)
return driver
""" Return browser function name """
def _get_driver_creation_function(self,browser_name):
try:
func_name = BROWSER_NAMES[browser_name]
except KeyError:
raise ValueError(browser_name + " is not a supported browser.")
return getattr(self, func_name)
""" Return browser driver path """
def _get_driver_path(self,browser_name):
try:
func_name = self._get_driver_creation_function(browser_name)
driver_path = os.path.join(DRIVERS_PATH , BROWSER_PATHS[func_name])
except KeyError:
raise ValueError(browser_name + " is not a supported browser.")
return getattr(self, driver_path)
""" Used inside driver creation functions """
def _generic_make_driver(self, webdriver_type, desired_cap_type, remote_url, desired_caps, options=None):
if is_falsy(remote_url):
if options is None:
driver = webdriver_type()
else:
driver = webdriver_type(options=options)
else:
driver = self._create_remote_web_driver(desired_cap_type, remote_url, desired_caps, options=options)
return driver
def _create_remote_web_driver(self, capabilities_type, remote_url, desired_capabilities=None, profile=None, options=None):
desired_capabilities_object = capabilities_type.copy()
if not isinstance(desired_capabilities, dict):
desired_capabilities = self._parse_capabilities_string(desired_capabilities)
desired_capabilities_object.update(desired_capabilities or {})
return webdriver.Remote(desired_capabilities=desired_capabilities_object,
command_executor=str(remote_url), browser_profile=profile,
options=options)
def _make_ff(self, remote, desired_capabilities, profile_dir, options=None):
if is_falsy(profile_dir):
profile = webdriver.FirefoxProfile()
else:
profile = webdriver.FirefoxProfile(profile_dir)
if is_truthy(remote):
driver = self._create_remote_web_driver(webdriver.DesiredCapabilities.FIREFOX, remote,
desired_capabilities, profile, options=options)
else:
driver = webdriver.Firefox(firefox_profile=profile, options=options, **self._geckodriver_log_config)
return driver
def _make_headless_ff(self, remote, desired_capabilities, profile_dir):
options = webdriver.FirefoxOptions()
options.set_headless()
return self._make_ff(remote, desired_capabilities, profile_dir, options=options)
def _make_chrome(self, remote, desired_capabilities, profile_dir, options=None):
return self._generic_make_driver(
webdriver.Chrome, webdriver.DesiredCapabilities.CHROME, remote,
desired_capabilities, options=options)
def _make_headless_chrome(self, remote, desired_capabilities, profile_dir):
options = webdriver.ChromeOptions()
options.set_headless()
return self._make_chrome(remote, desired_capabilities, profile_dir, options)
这个函数应该打开一个浏览器,它会调用默认的 chrome 驱动:
driver().create()
【问题讨论】:
-
有什么错误?
-
Traceback(最近一次调用最后):文件“main.py”,第 12 行,在
driver().create() 文件“C:\Users\modules\driver.py” ,第 52 行,在创建中返回 self._make_driver(browser_name) 文件“C:\Users\modules\driver.py”,第 56 行,在 _make_driver driver_path = self._get_driver_path(browser_name) 文件“C:\Users\modules\driver .py",第 80 行,在 _get_driver_path 中引发 ValueError(browser_name + " is not a supported browser.") ValueError: chrome is not a supported browser. -
请edit您的问题包括堆栈跟踪。代码和堆栈跟踪在注释部分很难阅读。
-
我建议您打印您遇到的错误。您通过提出自己的异常来隐藏真正的异常。只需最基本的调试即可显示问题。
标签: python google-chrome selenium robotframework