etaoin

MatthewLisp 2021-02-08T20:52:40.000600Z

Hello 👋

MatthewLisp 2021-02-08T20:58:30.005200Z

I'm using etaoin, and before anything else, i want to say, it's an amazing library, and very comfortable to use it, specially in a REPL driven environment like Clojure can provide 😄 so, i'm using etaoin with firefox was trying to open new windows, and i stumbled on the function create-session , i quote the docs:

create-session
(create-session driver & [capabilities])

Initiates a new session for a driver. Opens a browser window as a
side-effect. All the further requests are made within specific
session. Some drivers may work with only one active session. Returns
a long string identifier.
And i'm trying on my repl:
(def driver (etaoin/firefox {:host "localhost"}))
(etaoin/create-session driver)

>> Execution error (ExceptionInfo) at slingshot.support/stack-trace (support.clj:201).
throw+: {:response {:value {:error "session not created", :message "Session is already started", :stacktrace ""}}, :path "session", :payload {:desiredCapabilities {}}, :method :post, :type :etaoin/http-error, :port 4444, :host "localhost", :status 500, :driver {:type :firefox, :host "localhost", :port 4444, :url "<http://localhost:4444>", :locator "xpath", :capabilities nil}}
As the doc says Some drivers may work with only one active session. is this the case of firefox? and also, i saw this on mozilla docs: https://developer.mozilla.org/en-US/docs/Web/WebDriver/Commands/New_Window Which seems to be a way to open a window, but i didn't found this function on etaoin, any thoughts ?

MatthewLisp 2021-02-09T13:58:51.005500Z

It seems firefox geckodriver (it's webdriver implementation), actually do requires one geckodriver instance per session: https://github.com/mozilla/geckodriver/issues/1213 And about opening a new window, i don't know if it's a function that is really missing from etaoin's API, but here is the code for opening a new window:

(def driver (etaoin/firefox {:host "localhost"}))

(etaoin/execute {:driver driver
                   :method :post
                   :path [:session (:session driver) :window :new]
                   :data {:type "window"}})