require "watir" # Cookies module Watir class Browser # TODO: support windows. # # firefox only. def keep_cookies! require "tagen/selenium-webdriver/webdriver/firefox" launcher = driver.instance_variable_get("@bridge").instance_variable_get("@launcher") launcher.keep_cookies! end # Read cookies from Mozilla cookies.txt-style IO stream # # @param file [IO,String] # def load_cookies(file) now = ::Time.now io = case file when String open(file) else file end io.each_line do |line| line.chomp! line.gsub!(/#.+/, '') fields = line.split("\t") next if fields.length != 7 name, value, domain, for_domain, path, secure, version = fields[5], fields[6], fields[0], (fields[1] == "TRUE"), fields[2], (fields[3] == "TRUE"), 0 expires_seconds = fields[4].to_i expires = (expires_seconds == 0) ? nil : ::Time.at(expires_seconds) next if expires and (expires < now) cookies.add(name, value, domain: domain, path: path, expires: expires, secure: secure) end io.close if String === file self end # Write cookies to Mozilla cookies.txt-style IO stream # # @param file [IO,String] def dump_cookies(file) io = case file when String open(file, "w") else file end cookies.to_a.each do |cookie| io.puts([ cookie[:domain], "FALSE", # for_domain cookie[:path], cookie[:secure] ? "TRUE" : "FALSE", cookie[:expires].to_i.to_s, cookie[:name], cookie[:value] ].join("\t")) end io.close if String === file self end end end module Watir class Element # quick set value. # # @example # # form = browser.form(id: "foo") # form.set("//input[@name='value']", "hello") # form.set("//input[@name='check']", true) # form.set("//select[@name='foo']", "Bar") # form.set("//textarea[@name='foo']", "bar") # def set2(selector, value=nil) elem = element(xpath: selector).to_subtype case elem when Watir::Radio elem.set when Watir::Select elem.select value when Watir::Input elem.set value when Watir::TextArea elem.set value else elem.click end end end end