getting processes closer
parent
e0bf4848ff
commit
58da422a11
|
@ -1,4 +1,5 @@
|
||||||
USING: kernel http http.client http.server io.sockets io.streams.byte-array io.pathnames io.encodings.binary io.encodings.string io.encodings.utf8 io.launcher accessors urls parser effects.parser words arrays sequences quotations json.reader json.writer formatting assocs namespaces present hashtables words.symbol combinators lexer calendar prettyprint.backend base64 images.png destructors math.parser threads ;
|
USING: kernel http http.client http.server io.sockets io.streams.byte-array io.pathnames io.encodings.binary io.encodings.string io.encodings.utf8 io.launcher accessors urls parser effects.parser words arrays sequences quotations json.reader json.writer formatting assocs namespaces present hashtables words.symbol combinators lexer calendar prettyprint.backend base64 images.png destructors math.parser threads ;
|
||||||
|
|
||||||
USING: prettyprint ;
|
USING: prettyprint ;
|
||||||
|
|
||||||
IN: web-driver
|
IN: web-driver
|
||||||
|
@ -14,7 +15,7 @@ CONSTANT: partial-link-text-location-strategy "partial link text"
|
||||||
CONSTANT: tag-name-location-strategy "tag name"
|
CONSTANT: tag-name-location-strategy "tag name"
|
||||||
CONSTANT: xpath-location-strategy "xpath"
|
CONSTANT: xpath-location-strategy "xpath"
|
||||||
|
|
||||||
TUPLE: web-driver-session remote-url session-id capabilities ;
|
TUPLE: web-driver-session remote-url web-driver-process session-id capabilities ;
|
||||||
TUPLE: session-status message ready? ;
|
TUPLE: session-status message ready? ;
|
||||||
|
|
||||||
: current-web-driver-session> ( -- session )
|
: current-web-driver-session> ( -- session )
|
||||||
|
@ -56,23 +57,23 @@ TUPLE: session-status message ready? ;
|
||||||
: <web-driver-delete-request> ( path -- request )
|
: <web-driver-delete-request> ( path -- request )
|
||||||
<web-driver-url> <delete-request> ;
|
<web-driver-url> <delete-request> ;
|
||||||
|
|
||||||
: <session-post-request> ( data path -- request )
|
: <session-post-request> ( data path -- request )
|
||||||
[ <web-driver-post-data> ] dip <web-driver-session-url> <post-request> ;
|
[ <web-driver-post-data> ] dip <web-driver-session-url> <post-request> ;
|
||||||
|
|
||||||
: <session-get-request> ( path -- request )
|
: <session-get-request> ( path -- request )
|
||||||
<web-driver-session-url> <get-request> ;
|
<web-driver-session-url> <get-request> ;
|
||||||
|
|
||||||
: <session-delete-request> ( path -- request )
|
: <session-delete-request> ( path -- request )
|
||||||
<web-driver-session-url> <delete-request> ;
|
<web-driver-session-url> <delete-request> ;
|
||||||
|
|
||||||
: <element-get-request> ( element path -- request )
|
: <element-get-request> ( element path -- request )
|
||||||
swap id>> <web-driver-element-url> <get-request> ;
|
swap id>> <web-driver-element-url> <get-request> ;
|
||||||
|
|
||||||
: <element-post-request> ( element data path -- request )
|
: <element-post-request> ( element data path -- request )
|
||||||
swap [ swap id>> <web-driver-element-url> ] dip <web-driver-post-data> swap <post-request> ;
|
swap [ swap id>> <web-driver-element-url> ] dip <web-driver-post-data> swap <post-request> ;
|
||||||
|
|
||||||
: http-web-driver-request ( request -- data )
|
: http-web-driver-request ( request -- data )
|
||||||
http-request nip json> "value" of ;
|
http-request nip json> "value" of ;
|
||||||
|
|
||||||
! Capabilities
|
! Capabilities
|
||||||
! https://www.w3.org/webdriver/#capabilities
|
! https://www.w3.org/webdriver/#capabilities
|
||||||
|
@ -91,16 +92,16 @@ TUPLE: capabilities { always-match hashtable } { first-match hashtable } ;
|
||||||
{ "moz:firefoxOptions" { "args" { "-headless" } } }
|
{ "moz:firefoxOptions" { "args" { "-headless" } } }
|
||||||
} ;
|
} ;
|
||||||
|
|
||||||
! Sessions
|
! Sessions
|
||||||
! https://www.w3.org/TR/webdriver/#sessions
|
! https://www.w3.org/TR/webdriver/#sessions
|
||||||
|
|
||||||
: status ( -- session-status )
|
: status ( -- session-status )
|
||||||
"status" <web-driver-get-request> http-web-driver-request
|
"status" <web-driver-get-request> http-web-driver-request
|
||||||
[ "message" of ] [ "ready" of ] bi session-status boa ;
|
[ "message" of ] [ "ready" of ] bi session-status boa ;
|
||||||
|
|
||||||
: new-session ( capabilities -- json )
|
: new-session ( capabilities -- json )
|
||||||
"session" <web-driver-post-request> http-web-driver-request
|
"session" <web-driver-post-request> http-web-driver-request
|
||||||
dup "sessionId" of current-session-id set ;
|
dup "sessionId" of current-session-id set ;
|
||||||
|
|
||||||
: delete-session ( id -- )
|
: delete-session ( id -- )
|
||||||
<web-driver-delete-request> http-web-driver-request drop ;
|
<web-driver-delete-request> http-web-driver-request drop ;
|
||||||
|
@ -133,7 +134,7 @@ TUPLE: timeouts
|
||||||
"url" <session-get-request> http-web-driver-request >url ;
|
"url" <session-get-request> http-web-driver-request >url ;
|
||||||
|
|
||||||
: navigate-to ( url -- )
|
: navigate-to ( url -- )
|
||||||
present 'H{ { "url" _ } } "url" <session-post-request> http-web-driver-request drop ;
|
present 'H{ { "url" _ } } "url" <session-post-request> http-web-driver-request drop ;
|
||||||
|
|
||||||
: back ( -- )
|
: back ( -- )
|
||||||
f "back" <session-post-request> http-web-driver-request drop ;
|
f "back" <session-post-request> http-web-driver-request drop ;
|
||||||
|
@ -334,23 +335,28 @@ TUPLE: rect x y width height ;
|
||||||
<any-port-local-inet4> utf8 <server>
|
<any-port-local-inet4> utf8 <server>
|
||||||
[ addr>> port>> ] [ dispose ] bi number>string ;
|
[ addr>> port>> ] [ dispose ] bi number>string ;
|
||||||
|
|
||||||
: <chrome-driver-process> ( capabilities -- process )
|
: <web-driver-process> ( host port command -- process )
|
||||||
drop
|
-rot '{ _ "--host" _ "--port" _ } utf8 <process-reader> ;
|
||||||
"chromedriver --silent --port 4444" utf8 <process-stream> ;
|
|
||||||
|
|
||||||
: <gecko-driver-process> ( host port -- process )
|
: <gecko-driver-process> ( host port -- process )
|
||||||
'{ "geckodriver" "--host" _ "--port" _ } utf8 <process-reader> ;
|
"geckodriver" <web-driver-process> ;
|
||||||
|
|
||||||
: <web-driver-session> ( -- )
|
: <chrome-driver-process> ( host port -- process )
|
||||||
|
"chromedriver" <web-driver-process> ;
|
||||||
|
|
||||||
|
: init-driver-session ( -- )
|
||||||
"127.0.0.1" get-free-listen-port
|
"127.0.0.1" get-free-listen-port
|
||||||
[ ":" prepend append "http://" prepend "/" append >url ]
|
[ ":" prepend append "http://" prepend "/" append >url ]
|
||||||
[ <gecko-driver-process> ] 2bi
|
[ <gecko-driver-process> ] 2bi
|
||||||
f f web-driver-session boa
|
f f web-driver-session boa
|
||||||
>current-web-driver-session ;
|
>current-web-driver-session ;
|
||||||
|
|
||||||
! [ ready?>> ] [ status 1 seconds sleep ] do until
|
: <web-driver-session> ( capabilities -- )
|
||||||
!
|
init-driver-session
|
||||||
! new-session [ "sessionId" of ] [ "capabilities" of ] bi
|
|
||||||
!
|
[ ready?>> ] [ 1 seconds sleep status ] do until
|
||||||
! current-web-driver-session> swap >>capabilities swap >>session-id
|
|
||||||
! >current-web-driver-session ;
|
new-session [ "sessionId" of ] [ "capabilities" of ] bi
|
||||||
|
|
||||||
|
current-web-driver-session> swap >>capabilities swap >>session-id
|
||||||
|
>current-web-driver-session ;
|
||||||
|
|
Loading…
Reference in New Issue