2017-04-07 462 views
0

我試圖理解的代碼片斷這是相當類似以下內容:爲什麼在Selenium中使用add_experimental_option?

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的任務嗎?

謝謝

回答

0

的方式實現的webdriver接受他們試圖自動瀏覽器配置信息是通過一個概念叫「能力」。啓動會話(啓動瀏覽器)時,用戶指定他們希望啓動的驅動程序支持哪些功能。這可能包括接受自簽名SSL證書的能力,瀏覽器​​的配置文件設置或任何其他許多事情。

然而,這個模型的挑戰之一是它被實現爲一個字典,鍵值對由任意字符串和值爲任意類型的對象的鍵組成。這裏有兩個潛在的問題。首先,功能名稱很容易被忽略或錯誤輸入,並且可能不被所有瀏覽器支持。而且,在代碼實際執行之前不可能知道這一點。至於值,通常情況下,驅動程序期望與它支持的名稱相關的值具有特定類型,並且在驅動程序實現之間這可能差別很大。

輸入選項類別。這些結構爲特定驅動程序可能期望的各種功能提供setter。它可以強制通過功能字典傳遞給驅動程序的名稱是正確的,並且可以對值強制執行類型安全性。但是,大多數驅動程序實現(Chromium項目的chromedriver,Mozilla的geckodriver,用於Edge瀏覽器的Microsoft MicrosoftWebDriver等)不由Selenium項目構建或維護。驅動程序提供者可能會發佈一個新的驅動程序版本,該版本理解Selenium項目沒有時間在該驅動程序的選項類中創建類型安全的setter的新功能。

爲了使用戶在發佈下一個版本的Selenium之前不會被阻止使用新的功能,選項類有一個「添加一個額外的選項,但沒有類型安全的setter」方法。在Python中,這是您的示例看起來被寫入的內容,該方法被稱爲add_experimental_option。該方法通常用於臨時使用,直到Selenium項目可以推出包含驅動程序實現者(Chrome驅動程序,在您的示例中)添加的新選項的類型安全setter的新版本。

+0

太棒了!非常感謝。這非常有幫助。 – zeroth

相關問題