为什么在Selenium中使用add_experimental_option?

时间:2017-04-07 08:48:39

标签: python-2.7 selenium selenium-chromedriver

我正在尝试理解与以下内容非常相似的代码段:

from selenium.webdriver.chrome.options import Options
chrome_options = Options()
port_number = "127.0.0.1.8888"
chrome_options.add_experimental_option("someAddressName", port_number)

我试着寻找解释,但直到现在还没有得到任何满意的答案。有人可以解释Options()add_experimental_option的任务吗?

谢谢

1 个答案:

答案 0 :(得分:1)

WebDriver实现接受他们尝试自动化的浏览器的配置信息的方式是通过一种称为“功能”的概念。在启动会话(启动浏览器)时,用户指定他们希望启动的驱动程序支持哪些功能。这可能包括接受自签名SSL证书的能力,浏览器​​的配置文件设置或任何其他内容。

然而,这个模型的挑战之一是它被实现为字典,键值对由作为任意字符串的键和作为任意类型的对象的值组成。这里有两个潜在的问题。首先,功能名称很容易被遗忘或输入错误,并且所有浏览器可能都不支持。而且,在代码实际执行之前不可能知道这一点。对于值,通常,驱动程序期望与其支持的名称关联的值是特定类型,并且在驱动程序实现之间可能会有很大差异。

输入选项类。这些构造为特定驱动程序可能期望的各种功能提供了setter。它可以强制通过功能字典传递给驱动程序的名称是正确的,并且可以强制值的类型安全。但是,大多数驱动程序实现(Chromium项目的chromedriver,Mozilla的geckodriver,Microsoft的MicrosoftWebDriver用于Edge浏览器等)不是由Selenium项目构建或维护的。可能是驱动程序提供程序发布了一个新的驱动程序版本,该驱动程序版本了解Selenium项目没有时间在该驱动程序的选项类中创建类型安全的setter的新功能。

因此,在下一版本的Selenium发布之前,用户不会被阻止使用新功能,因此选项类具有“添加其他选项,而这种选项还没有类型安全的setter”方法。在Python中,这是您的示例所写的内容,该方法称为add_experimental_option。该方法通常用于临时使用,直到Selenium项目可以推送包含类型安全设置器的新版本,以用于驱动程序实现者(在您的示例中为Chrome驱动程序)添加的任何新选项。