如何从 Tcl Shell 触发非阻塞 Selenium Web 驱动程序启动?
How to trigger a non blocking Selenium web driver launch from Tcl Shell?
我在通过 wish shell 启动 Selenium Web Driver 时遇到问题。
我用过以下方法。
以下命令启动 Selenium 驱动程序但从未启动 returns
exec cmd /C java -jar C:/selenium/selenium-server-standalone-2.45.0.jar -Dwebdriver.chrome.driver=C:/selenium/chromedriver.exe
从不 returns amd 阻止愿望 shell。
有没有办法以非阻塞方式启动它。
也尝试了以下方法但没有成功:
eval exec "java -jar C:/selenium/selenium-server-standalone-2.45.0.jar -Dwebdriver.chrome.driver=C:/selenium/chromedriver.exe"
输出:
Registry key 'Software\JavaSoft\Java Runtime Environment\CurrentVersion'
has value '1.8', but '1.6' is required.
Error: could not find java.dll
Error: could not find Java SE Runtime Environment.
而
exec "java -jar C:/selenium/selenium-server-standalone-2.45.0.jar -Dwebdriver.chrome.driver=C:/selenium/chromedriver.exe"
输出:
couldn't execute "java -jar C:\selenium\selenium-server-standalone-2.45.0.jar -Dwebdriver.chrome.driver=C:\selenium\chromedriver.exe": No error
这行得通,但如果我们可以触发一个非阻塞的 cmd 调用,那将是一件好事。
thread::create {exec cmd /C "java -jar C:/selenium/selenium-server-standalone-2.53.0.jar -Dwebdriver.chrome.driver=C:/selenium/chromedriver.exe"}
将&
作为exec
的最后一个参数,使子进程的运行异步和断开:
exec java -jar C:/selenium/selenium-server-standalone-2.45.0.jar -Dwebdriver.chrome.driver=C:/selenium/chromedriver.exe &
您可能不需要 cmd /C
,也绝对不需要 eval
。更重要的是,为了便于阅读,您可以分解出其中的一些内容:
set selenium C:/selenium/selenium-server-standalone-2.45.0.jar
set driver C:/selenium/chromedriver.exe
exec java -jar $selenium -Dwebdriver.chrome.driver=$driver &
如果您需要能够检测到子进程何时完成,则可以使用管道:
# Basic configuration
set seleniumDirectory C:/selenium
set seleniumVersion 2.45.0
# Convert to actual paths
set selenium [file join $seleniumDirectory selenium-server-standalone-$seleniumVersion.jar]
set driver [file join $seleniumDirectory chromedriver.exe]
# Use them
set pipeline [open |[list java -jar $selenium -Dwebdriver.chrome.driver=$driver] r]
然后你可以设置一个可读的fileevent
,这样当管道被另一端关闭时你会得到通知。您可能还需要在其他时间从管道中读取数据;可能需要进行一些实验。
创建管道的语法有点古怪。是的,|
在 之前 [list
。这是出于可怕的历史原因……
我在通过 wish shell 启动 Selenium Web Driver 时遇到问题。 我用过以下方法。
以下命令启动 Selenium 驱动程序但从未启动 returns
exec cmd /C java -jar C:/selenium/selenium-server-standalone-2.45.0.jar -Dwebdriver.chrome.driver=C:/selenium/chromedriver.exe
从不 returns amd 阻止愿望 shell。
有没有办法以非阻塞方式启动它。
也尝试了以下方法但没有成功:
eval exec "java -jar C:/selenium/selenium-server-standalone-2.45.0.jar -Dwebdriver.chrome.driver=C:/selenium/chromedriver.exe"
输出:
Registry key 'Software\JavaSoft\Java Runtime Environment\CurrentVersion'
has value '1.8', but '1.6' is required.
Error: could not find java.dll
Error: could not find Java SE Runtime Environment.
而
exec "java -jar C:/selenium/selenium-server-standalone-2.45.0.jar -Dwebdriver.chrome.driver=C:/selenium/chromedriver.exe"
输出:
couldn't execute "java -jar C:\selenium\selenium-server-standalone-2.45.0.jar -Dwebdriver.chrome.driver=C:\selenium\chromedriver.exe": No error
这行得通,但如果我们可以触发一个非阻塞的 cmd 调用,那将是一件好事。
thread::create {exec cmd /C "java -jar C:/selenium/selenium-server-standalone-2.53.0.jar -Dwebdriver.chrome.driver=C:/selenium/chromedriver.exe"}
将&
作为exec
的最后一个参数,使子进程的运行异步和断开:
exec java -jar C:/selenium/selenium-server-standalone-2.45.0.jar -Dwebdriver.chrome.driver=C:/selenium/chromedriver.exe &
您可能不需要 cmd /C
,也绝对不需要 eval
。更重要的是,为了便于阅读,您可以分解出其中的一些内容:
set selenium C:/selenium/selenium-server-standalone-2.45.0.jar
set driver C:/selenium/chromedriver.exe
exec java -jar $selenium -Dwebdriver.chrome.driver=$driver &
如果您需要能够检测到子进程何时完成,则可以使用管道:
# Basic configuration
set seleniumDirectory C:/selenium
set seleniumVersion 2.45.0
# Convert to actual paths
set selenium [file join $seleniumDirectory selenium-server-standalone-$seleniumVersion.jar]
set driver [file join $seleniumDirectory chromedriver.exe]
# Use them
set pipeline [open |[list java -jar $selenium -Dwebdriver.chrome.driver=$driver] r]
然后你可以设置一个可读的fileevent
,这样当管道被另一端关闭时你会得到通知。您可能还需要在其他时间从管道中读取数据;可能需要进行一些实验。
创建管道的语法有点古怪。是的,|
在 之前 [list
。这是出于可怕的历史原因……