使用Haskell和webdriver重用现有的Selenium会话

使用Haskell和webdriver重用现有的Selenium会话,selenium,haskell,selenium-webdriver,webdriver,Selenium,Haskell,Selenium Webdriver,Webdriver,尝试在REPL会话中使用来自Haskell的Selenium(带有webdriverpackage)。首先,我运行以下命令: startup :: IO () startup = do runSession chromeConfig $ do openPage "http://www.google.com" 新的Chrome浏览器打开,导航到谷歌,将其留在那里,启动功能完成,Chrome浏览器仍然打开(就像我需要它一样) 现在我想写一些简单的脚本来与Google页面交互,并从REP

尝试在REPL会话中使用来自Haskell的Selenium(带有
webdriver
package)。首先,我运行以下命令:

startup :: IO ()
startup = do
  runSession chromeConfig $ do
    openPage "http://www.google.com"
新的Chrome浏览器打开,导航到谷歌,将其留在那里,启动功能完成,Chrome浏览器仍然打开(就像我需要它一样)

现在我想写一些简单的脚本来与Google页面交互,并从REPL运行它们。如何重用已打开的现有会话/浏览器

如果我再次尝试runSession,它会打开一个新的浏览器(如文档所述)。如果我尝试使用
runWD
,它需要一个会话作为第一个参数,我还没有这个参数

有一个
sessions::WebDriver wd=>wd[(SessionId,Capabilities)]
值,但要使用它,我必须在
runWD
中,这需要一个会话!此外,它返回一个
SessionID
,我没有看到任何函数将其转换为
WDSession

main = runSession chromeConfig $ do
    openPage "http://www.google.com"

    liftIO $ putStrLn "Enter your search term"
    searchTerm <- liftIO getLine

    input <- findElem "#lst-ib"

    sendKeys input searchTerm
    submit input

我在这里兜圈子,谢谢你的帮助。我不知道为什么会这么复杂,是因为Selenium还是Haskell?

我以前从未听说过这个库,但现在翻看一下,我看到
运行会话
似乎表明它将在给定配置的情况下创建一个新会话,并运行
WD
操作

因此,也许类似的方法可以奏效:

do
  session <- runSession defaultConfig getSession
  runWD session (return ())
do

sessionWD
monad是的一个实例,这意味着您可以使用将WebDriver操作与IO操作交错。这允许您读取和写入控制台中的数据。其思想是在对
runSession
的单个调用中完成所有操作

main = runSession chromeConfig $ do
    openPage "http://www.google.com"

    liftIO $ putStrLn "Enter your search term"
    searchTerm <- liftIO getLine

    input <- findElem "#lst-ib"

    sendKeys input searchTerm
    submit input
main=runSession chromeConfig$do
openPage“http://www.google.com"
liftIO$putStrLn“输入您的搜索条件”

searchTerm感谢您的回答,但我正在明确寻找一种解决方案,该解决方案不需要在一个
runSession
块中写入所有代码。我确实尝试过类似的方法,但在GHCi重新加载后仍无法生存。@kmelva您可以使用“外部存储”使会话在GHCi重新加载时保持不变。但也许最简单的方法是从预先确定的文件路径读取会话(可能有一个指向该文件的环境变量,以增加灵活性)。@kmelva为什么希望/需要它在重新加载过程中保持不变?这是为了方便开发,还是目标工作流的基本部分?查看
WDSession
我认为唯一难以序列化的部分是
管理器。我不熟悉@danidiaz提到的
外国商店
——也许这是一个简单的方法让一些东西工作起来。