我可以使用Chrome驱动程序执行以下操作:
b = Watir::Browser.new :chrome, :switches => ['--user-data-dir=C:/some_folder/'] # same philosophy for selenium, just a bit of a different syntax.
将创建一个新的user data directory,其中将存储所有Cookie,书签,缓存等。基本上,创建一个新的配置文件。如果这样的文件夹不存在,它将创建它。如果确实存在,它将从中加载cookie /所有相关文件。
有没有办法使用Firefox驱动程序做同样的事情?我一直在寻找创建Firefox配置文件的方法,我发现的只有这篇文章:Creating a new Firefox Profile这并不能解决我的问题,因为我希望自动执行此操作,就像上面的Chrome驱动程序一样。此外,您似乎可以创建一个新的配置文件:
profile = Selenium::WebDriver::Firefox::Profile.new
但是我还没有找到一种方法来保存具有我指定名称的配置文件。
答案 0 :(得分:2)
基于Selenium Issue 1954和Issue 7374,Firefox驱动程序目前不具备此功能。鉴于某些项目成员反对这一想法,很难判断它是否会实施。
目前,我认为您必须对Selenium-WebDiver版本进行补丁以添加此功能。我得出了与@ shri046的答案相同的结论,即修改layout_on_disk
方法。
在您需要Selenium-WebDriver之后,为Selenium :: WebDriver :: FirefoxProfile添加以下猴子补丁。这个补丁中的逻辑是:
修补程序:
require 'watir-webdriver'
require 'selenium-webdriver'
module Selenium
module WebDriver
module Firefox
class Profile
class << self
attr_accessor :webdriver_profile_directory
end
def layout_on_disk
# When a directory is specified, ensure it is not deleted at exit
if Profile.webdriver_profile_directory
FileReaper.reap = false
end
# Use the specified directory if it already exists (ie assuming an existing profile)
if Profile.webdriver_profile_directory && Dir.exists?(Profile.webdriver_profile_directory)
return Profile.webdriver_profile_directory
end
# Create the profile directory as usual when it does not exist
profile_dir = @model ? create_tmp_copy(@model) : Dir.mktmpdir("webdriver-profile")
FileReaper << profile_dir
install_extensions(profile_dir)
delete_lock_files(profile_dir)
delete_extensions_cache(profile_dir)
update_user_prefs_in(profile_dir)
# If a directory is specified, move the created profile to that directory
if Profile.webdriver_profile_directory
FileUtils.cp_r(profile_dir, Profile.webdriver_profile_directory)
profile_dir = Profile.webdriver_profile_directory
end
profile_dir
end
end # Profile
end # Firefox
end # WebDriver
end # Selenium
要指定要使用的配置文件位置,请执行以下操作:
Selenium::WebDriver::Firefox::Profile.webdriver_profile_directory = 'C:/temp/test-profile'
browser = Watir::Browser.new :firefox
此补丁可能有限制和未经测试的区域。例如,它可能无法处理创建多个Firefox实例。但是,对于单个实例,它至少似乎适用于重新加载创建的书签(这是我的测试的限制)。
答案 1 :(得分:0)
查看source code for Firefox profile,似乎有一种方法可以让您将新创建的配置文件写入磁盘
def layout_on_disk
profile_dir = @model ? create_tmp_copy(@model) : Dir.mktmpdir("webdriver-profile")
FileReaper << profile_dir
install_extensions(profile_dir)
delete_lock_files(profile_dir)
delete_extensions_cache(profile_dir)
update_user_prefs_in(profile_dir)
profile_dir
end
现在没有关于Ruby实现的大量文档,但是这种方法的Java等价物有这些细节
/**
* Call this to cause the current profile to be written to disk. The profile directory is
* returned. Note that this profile directory is a temporary one and will be deleted when the JVM
* exists (at the latest)
*
* This method should be called immediately before starting to use the profile and should only be
* called once per instance of the {@link org.openqa.selenium.firefox.FirefoxDriver}.
*
* @return The directory containing the profile.
*/
在这里完成所有这些工作是对必须完成的工作的概述
我没有尝试过这个并进行测试,因此这可能不是最准确或最可行的解决方案 - 如果确实有效的话。这取决于您的用例,为什么您希望在所有测试中重复使用相同的配置文件。希望这会有所帮助。
答案 2 :(得分:0)
这适用于firefox 60+和新的marionette/geckodriver。
摆弄很多之后,这就是我如何使用自定义配置文件的方法:
$ xvfb-run firefox -CreateProfile test
options = Selenium::WebDriver::Firefox::Options.new # no profile specified here
options.add_argument "--profile"
options.add_argument "/home/jenkins/.mozilla/firefox/f0jecsmr.test"
@browser = Watir::Browser.new :firefox, options: options, driver_opts: {marionette_port: 2828}, **capabilities
它与documentation建议使用python的方式很接近。尽管需要阅读源代码才能弄清楚这些driver_opts
(或者我没有找到相关文档)。
有人吗?
答案 3 :(得分:-2)
您可以使用以下方式创建Firefox个人资料:
profile = Selenium::WebDriver::Firefox::Profile.new
b = Watir::Browser.new :firefox, :profile => profile`