A bunch of tests and fixes
This commit is contained in:
parent
e6d9203ea1
commit
93d1b296c9
|
@ -13,7 +13,8 @@ BaselineOfWebDriver >> baseline: spec [
|
||||||
spec
|
spec
|
||||||
package: 'WebDriver'
|
package: 'WebDriver'
|
||||||
];
|
];
|
||||||
baseline: 'NeoJSON' with: [ spec repository: 'github://svenvc/NeoJSON/repository' ]
|
baseline: 'NeoJSON' with: [ spec repository: 'github://svenvc/NeoJSON/repository' ];
|
||||||
|
baseline: 'OSSubprocess' with: [ spec repository: 'github://pharo-contributions/OSSubprocess:master/repository' ]
|
||||||
]
|
]
|
||||||
|
|
||||||
{ #category : #accessing }
|
{ #category : #accessing }
|
||||||
|
|
|
@ -0,0 +1,53 @@
|
||||||
|
"
|
||||||
|
A WebDriverTest is a test class for testing the behavior of WebDriver
|
||||||
|
"
|
||||||
|
Class {
|
||||||
|
#name : #WebDriverTest,
|
||||||
|
#superclass : #TestCase,
|
||||||
|
#instVars : [
|
||||||
|
'webdriver'
|
||||||
|
],
|
||||||
|
#category : #'WebDriver-Tests'
|
||||||
|
}
|
||||||
|
|
||||||
|
{ #category : #initialization }
|
||||||
|
WebDriverTest >> setUp [
|
||||||
|
super setUp.
|
||||||
|
webdriver := WebDriver geckodriver.
|
||||||
|
webdriver session.
|
||||||
|
]
|
||||||
|
|
||||||
|
{ #category : #running }
|
||||||
|
WebDriverTest >> tearDown [
|
||||||
|
webdriver deleteSession.
|
||||||
|
super tearDown.
|
||||||
|
]
|
||||||
|
|
||||||
|
{ #category : #tests }
|
||||||
|
WebDriverTest >> testFindElementInvalidCSSSelector [
|
||||||
|
self
|
||||||
|
should: [ webdriver url: 'https://ddg.co'; findElement: '' using: WDLocationStrategy cssSelector ]
|
||||||
|
raise: WDInvalidSelector.
|
||||||
|
]
|
||||||
|
|
||||||
|
{ #category : #tests }
|
||||||
|
WebDriverTest >> testFindElementValid [
|
||||||
|
| result |
|
||||||
|
result := webdriver url: 'https://ddg.co'; findElement: '.logo_homepage' using: WDLocationStrategy cssSelector.
|
||||||
|
self assert: (result isString).
|
||||||
|
]
|
||||||
|
|
||||||
|
{ #category : #tests }
|
||||||
|
WebDriverTest >> testFindElementsInvalidCSSSelector [
|
||||||
|
self
|
||||||
|
should: [ webdriver url: 'https://ddg.co'; findElements: '' using: WDLocationStrategy cssSelector ]
|
||||||
|
raise: WDInvalidSelector.
|
||||||
|
]
|
||||||
|
|
||||||
|
{ #category : #tests }
|
||||||
|
WebDriverTest >> testFindElementsValid [
|
||||||
|
| result |
|
||||||
|
result := webdriver url: 'https://ddg.co';
|
||||||
|
findElements: '.badge-link__bullet' using: WDLocationStrategy cssSelector.
|
||||||
|
self assert: result size equals: 3.
|
||||||
|
]
|
|
@ -0,0 +1 @@
|
||||||
|
Package { #name : #'WebDriver-Tests' }
|
|
@ -0,0 +1,5 @@
|
||||||
|
Class {
|
||||||
|
#name : #WDInvalidSelector,
|
||||||
|
#superclass : #Exception,
|
||||||
|
#category : #WebDriver
|
||||||
|
}
|
|
@ -11,28 +11,67 @@ Class {
|
||||||
#category : #WebDriver
|
#category : #WebDriver
|
||||||
}
|
}
|
||||||
|
|
||||||
{ #category : #positioning }
|
{ #category : #'instance creation' }
|
||||||
|
WebDriver class >> geckodriver [
|
||||||
|
| subproc |
|
||||||
|
subproc := OSSUnixSubprocess new
|
||||||
|
command: 'geckodriver'.
|
||||||
|
[ subproc run ] fork.
|
||||||
|
^ self new
|
||||||
|
browser: subproc
|
||||||
|
server: '127.0.0.1'
|
||||||
|
port: 4444.
|
||||||
|
]
|
||||||
|
|
||||||
|
{ #category : #navigation }
|
||||||
WebDriver >> back [
|
WebDriver >> back [
|
||||||
self send: { } to: 'session/',sessionId,'/back' using: #POST.
|
self send: { } to: 'session/',sessionId,'/back' using: #POST.
|
||||||
]
|
]
|
||||||
|
|
||||||
{ #category : #'as yet unclassified' }
|
{ #category : #initialization }
|
||||||
|
WebDriver >> browser: brs server: srv port: portnum [
|
||||||
|
browser := brs.
|
||||||
|
server := srv.
|
||||||
|
port := portnum.
|
||||||
|
]
|
||||||
|
|
||||||
|
{ #category : #finalization }
|
||||||
WebDriver >> deleteSession [
|
WebDriver >> deleteSession [
|
||||||
"Deletes the session."
|
"Deletes the session."
|
||||||
self send: {} to: 'session/',sessionId using: #DELETE.
|
self send: {} to: 'session/',sessionId using: #DELETE.
|
||||||
]
|
]
|
||||||
|
|
||||||
{ #category : #'as yet unclassified' }
|
{ #category : #finalization }
|
||||||
|
WebDriver >> finalize [
|
||||||
|
browser terminate.
|
||||||
|
super finalize.
|
||||||
|
]
|
||||||
|
|
||||||
|
{ #category : #accessing }
|
||||||
WebDriver >> findElement: elemSelector using: locStrategy [
|
WebDriver >> findElement: elemSelector using: locStrategy [
|
||||||
^(self send: { #using -> locStrategy. #value -> elemSelector. } to: 'session/',sessionId,'/element' using: #POST) at: #value values first.
|
| reply |
|
||||||
|
reply := (self send: { #using -> locStrategy. #value -> elemSelector. }
|
||||||
|
to: 'session/',sessionId,'/element'
|
||||||
|
using: #POST)
|
||||||
|
at: #value.
|
||||||
|
(reply at: #error ifPresent: [ true ] ifAbsent: [ false ])
|
||||||
|
ifTrue: [ ^ WDInvalidSelector new signal: (reply at: #message) ]
|
||||||
|
ifFalse: [ ^ reply values first ]
|
||||||
]
|
]
|
||||||
|
|
||||||
{ #category : #'as yet unclassified' }
|
{ #category : #accessing }
|
||||||
WebDriver >> findElements: elemSelector using: locStrategy [
|
WebDriver >> findElements: elemSelector using: locStrategy [
|
||||||
^(self send: { #using -> locStrategy. #value -> elemSelector. } to: 'session/',sessionId,'/elements' using: #POST) at: #value values.
|
| reply |
|
||||||
|
reply := (self send: { #using -> locStrategy. #value -> elemSelector. }
|
||||||
|
to: 'session/',sessionId,'/elements'
|
||||||
|
using: #POST)
|
||||||
|
at: #value.
|
||||||
|
(reply isArray)
|
||||||
|
ifTrue: [ ^ reply collect: [ :elem | elem values first ] ]
|
||||||
|
ifFalse: [ ^ WDInvalidSelector new signal: (reply at: #message) ]
|
||||||
]
|
]
|
||||||
|
|
||||||
{ #category : #positioning }
|
{ #category : #navigation }
|
||||||
WebDriver >> forward [
|
WebDriver >> forward [
|
||||||
self send: { } to: 'session/',sessionId,'/forward' using: #POST.
|
self send: { } to: 'session/',sessionId,'/forward' using: #POST.
|
||||||
]
|
]
|
||||||
|
@ -43,12 +82,12 @@ WebDriver >> initialize: srv port: portnum [
|
||||||
port := portnum.
|
port := portnum.
|
||||||
]
|
]
|
||||||
|
|
||||||
{ #category : #positioning }
|
{ #category : #navigation }
|
||||||
WebDriver >> refresh [
|
WebDriver >> refresh [
|
||||||
self send: { } to: 'session/',sessionId,'/refresh' using: #POST.
|
self send: { } to: 'session/',sessionId,'/refresh' using: #POST.
|
||||||
]
|
]
|
||||||
|
|
||||||
{ #category : #'as yet unclassified' }
|
{ #category : #navigation }
|
||||||
WebDriver >> send: dict to: url using: method [
|
WebDriver >> send: dict to: url using: method [
|
||||||
|result|
|
|result|
|
||||||
result := nil.
|
result := nil.
|
||||||
|
@ -66,12 +105,6 @@ WebDriver >> send: dict to: url using: method [
|
||||||
^result.
|
^result.
|
||||||
]
|
]
|
||||||
|
|
||||||
{ #category : #initialization }
|
|
||||||
WebDriver >> server: srv port: portnum [
|
|
||||||
server := srv.
|
|
||||||
port := portnum.
|
|
||||||
]
|
|
||||||
|
|
||||||
{ #category : #accessing }
|
{ #category : #accessing }
|
||||||
WebDriver >> session [
|
WebDriver >> session [
|
||||||
"Initializes a new WebDriver session."
|
"Initializes a new WebDriver session."
|
||||||
|
@ -84,18 +117,18 @@ WebDriver >> status [
|
||||||
^ (self send: { } to: 'status' using: #GET) at: #value.
|
^ (self send: { } to: 'status' using: #GET) at: #value.
|
||||||
]
|
]
|
||||||
|
|
||||||
{ #category : #positioning }
|
{ #category : #accessing }
|
||||||
WebDriver >> title [
|
WebDriver >> title [
|
||||||
^ (self send: { } to: 'session/',sessionId,'/title' using: #GET) at: #value.
|
^ (self send: { } to: 'session/',sessionId,'/title' using: #GET) at: #value.
|
||||||
]
|
]
|
||||||
|
|
||||||
{ #category : #'as yet unclassified' }
|
{ #category : #'text input' }
|
||||||
WebDriver >> type: text into: element [
|
WebDriver >> type: text into: element [
|
||||||
self send: { #text -> text } to: 'session/',sessionId,'/element/',element,'/value' using: #POST.
|
self send: { #text -> text } to: 'session/',sessionId,'/element/',element,'/value' using: #POST.
|
||||||
|
|
||||||
]
|
]
|
||||||
|
|
||||||
{ #category : #accessing }
|
{ #category : #navigation }
|
||||||
WebDriver >> url: url [
|
WebDriver >> url: url [
|
||||||
"Navigates the browser to the given URL."
|
"Navigates the browser to the given URL."
|
||||||
self send: { #url -> url } to: 'session/',sessionId,'/url' using: #POST.
|
self send: { #url -> url } to: 'session/',sessionId,'/url' using: #POST.
|
||||||
|
|
Loading…
Reference in New Issue