Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Selenium rewrite #233

Open
wants to merge 263 commits into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
263 commits
Select commit Hold shift + click to select a range
6b2eacc
Trivial - remove dead code
craigfowler Feb 6, 2018
6d9cd58
WIP #19 - Attempt to restore Sauce Labs scenario name
craigfowler Feb 6, 2018
f514e5e
WIP #19 - Upgrade WebDriverExtras
craigfowler Feb 6, 2018
201bee4
Merge branch 'feature/19-SauceLabs-scenario-names'
craigfowler Feb 6, 2018
07067fe
Update package dependencies
craigfowler Feb 6, 2018
2abfe28
Resolve #16 - Update NuGet package spec
craigfowler Feb 6, 2018
30838a2
Fix version number script
craigfowler Feb 6, 2018
b54cb14
Bump versions
craigfowler Feb 6, 2018
a237766
Fix nuspec
craigfowler Feb 6, 2018
76b508b
Update git ignore rules
craigfowler Feb 6, 2018
9f0ae06
Merge branch 'release/0.1.0' into production
craigfowler Feb 6, 2018
da37f35
Merge tag 'v0.1.0'
craigfowler Feb 6, 2018
6fd0f01
WIP #3 - Add initial implementation for assembly-embedded browser flags
craigfowler Feb 7, 2018
7ce4b74
WIP #3 - Add tests for browser flags
craigfowler Feb 7, 2018
f095d11
Trivial - rename exception
craigfowler Feb 7, 2018
e9d3b0c
WIP #3 - Add mechanism to read flags from files as well as hardcoded
craigfowler Feb 7, 2018
8059c55
Trivial - rename file
craigfowler Feb 7, 2018
26a0c46
Resolve #3 - Upgrade to WebDriverExtras v0.3.2
craigfowler Feb 7, 2018
8c79098
Merge branch 'feature/3-BrowserFlags'
craigfowler Feb 7, 2018
93d9fd5
Trivial - add XML comments
craigfowler Feb 7, 2018
08ab8bf
WIP #12 - Add the flags which are missing and needed for new ignore m…
craigfowler Feb 7, 2018
cebebcd
Resolve #12 - Improve upon the ignore-test mechanism, to work with flags
craigfowler Feb 7, 2018
fff5007
Merge branch 'feature/12-Ignore-improvements'
craigfowler Feb 7, 2018
ba26537
Resolve #21 - Wrong browser name in defs file
craigfowler Feb 9, 2018
5cdfe5d
Upgrade WebDriverExtras to v0.3.3
craigfowler Feb 9, 2018
22d60dd
Resolve #22 - web browser identification now included in reports
craigfowler Feb 9, 2018
afe2dca
Resolve #6 - Greatly expand browser testing coverage
craigfowler Feb 9, 2018
2c01c5f
Resolve #1 - All ignored tests reviewed. Minor improvement to syntax.
craigfowler Feb 9, 2018
65cfc30
Resolve #9 - Ensure tests run periodically with latest browser versions
craigfowler Feb 9, 2018
66f059e
WIP #4 - Import a copy of the SelectElement type from Selenium's repo
craigfowler Feb 9, 2018
c8cc87a
WIP #4 - Switch to use the new/copied select element implementation
craigfowler Feb 9, 2018
d8c8297
WIP #4 - Add implementation of SelectElement which uses a modifier key
craigfowler Feb 9, 2018
4913a02
Provisionally resolve #4 - Use new select implementation where needed
craigfowler Feb 9, 2018
71e392c
Related to #4 - Un-ignore tests
craigfowler Feb 9, 2018
d52a5ab
Merge branch 'feature/4-Multiselect-in-Edge-and-Safari'
craigfowler Feb 9, 2018
0750f28
WIP #4 - Update the browser flags definitions for affected Safari ver…
craigfowler Feb 10, 2018
3775499
WIP #4 - comment-out the build profile for Edge 13.x due to #23
craigfowler Feb 10, 2018
379dfcd
Merge branch 'feature/4-SelectMultiple-broken-still'
craigfowler Feb 10, 2018
6e84220
Related to #4 - Ignore tests requiring Command+Click
craigfowler Feb 10, 2018
8e74d04
WIP #28 - Attempted resolution by deferring element selectors
craigfowler Feb 10, 2018
ece91a5
Resolve #28 - IE9 entered quirks mode because of missing DOCTYPE
craigfowler Feb 10, 2018
d32ef81
Merge branch 'feature/28-IE8-and-9-TestingWebsite-failure'
craigfowler Feb 10, 2018
0601743
Trivial - add some Sauce Connect details I can copy in future
craigfowler Feb 11, 2018
baf03f9
Trivial - improve the webserver script
craigfowler Feb 11, 2018
70ffbfb
Trivial - improve build identification for Sauce Labs
craigfowler Feb 11, 2018
191f7b2
Resolve #23 - Add appropriate flag for Edge 13
craigfowler Feb 11, 2018
20d9332
WIP #23 - Upgrade WebDriverExtras to v0.5.0
craigfowler Feb 11, 2018
79de81d
Resolve #23 by officially removing support for Edge 13.x
craigfowler Feb 11, 2018
91edc6e
Merge branch 'feature/23-Edge-flag'
craigfowler Feb 11, 2018
313f659
Resolve #25 - Add browser flag for Firefox < v53.0
craigfowler Feb 11, 2018
3eb9f4f
WIP #25 - Update name of browser flag
craigfowler Feb 12, 2018
09edbad
WIP #25 - Update flag name
craigfowler Feb 12, 2018
a0f5baa
WIP #25 - Update flag name
craigfowler Feb 12, 2018
4fda312
WIP #25 - Update flag name
craigfowler Feb 12, 2018
dc3616c
WIP #25 - Update flag name
craigfowler Feb 12, 2018
2e9de98
WIP #25 - Update flag name
craigfowler Feb 12, 2018
ad03bba
Merge pull request #35 from csf-dev/feature/25-Old-Firefox-cannot-sel…
craigfowler Feb 12, 2018
31afec0
Resolve #33 - Safari 11 doesn't seem to be compatible with <select> e…
craigfowler Feb 12, 2018
9887745
Fix to #33 - Remove some obsolete code I accidentally left behind
craigfowler Feb 12, 2018
caadcdc
Resolve #30 - IE8 will not be supported: removing associated build
craigfowler Feb 12, 2018
a58eeeb
WIP #26 - Drop support for Firefox < version 53
craigfowler Feb 13, 2018
97a0ed4
Resolve #26 - While removing support for FF < v53, remove flags defin…
craigfowler Feb 13, 2018
b9731d0
Merge branch 'feature/26-Firefox-input'
craigfowler Feb 13, 2018
2cbd3c6
Resolve #20 - Improve the API of the web driver integration builder e…
craigfowler Feb 13, 2018
98117bb
Trivial - ditch a test which is no longer required
craigfowler Feb 13, 2018
df4ab48
Bump version numbers
craigfowler Feb 13, 2018
0050086
Check & fix NuGet dependencies
craigfowler Feb 13, 2018
d532560
Merge branch 'release/0.2.0' into production
craigfowler Feb 13, 2018
93c7a8e
Merge tag 'v0.2.0'
craigfowler Feb 13, 2018
09061aa
WIP #37 - Rely on a lazy webdriver instead of concrete
craigfowler Feb 21, 2018
24bf9ce
WIP #37 - Swap for non-lazy web browser
craigfowler Feb 21, 2018
85123c5
WIP #37 - Switch for a better mechanism of getting actors
craigfowler Feb 21, 2018
0ce0887
Merge branch 'feature/37-Lazy-webdriver'
craigfowler Feb 21, 2018
b1946c4
Bump version numbers
craigfowler Feb 21, 2018
04a9ce6
Merge branch 'release/0.2.1' into production
craigfowler Feb 21, 2018
c3b43fb
Merge tag 'v0.2.1'
craigfowler Feb 21, 2018
e3ee3a2
Bump version numbers
craigfowler Feb 23, 2018
238652e
Update package dependency versions
craigfowler Feb 23, 2018
463045e
Merge branch 'release/0.2.2' into production
craigfowler Feb 23, 2018
59e3367
Merge tag 'v0.2.2'
craigfowler Feb 23, 2018
ca4ad65
Unrelated - upgrade depenencies to latest versions
craigfowler Mar 5, 2018
0b32cb1
Resolve #42 - Remove redundant builder
craigfowler Mar 5, 2018
53556bf
Merge branch 'feature/42-remove-timespan-builder'
craigfowler Mar 5, 2018
d9e68ca
Resolve #38 - Delete obsolete class
craigfowler Mar 5, 2018
0ad6342
WIP #36 - Add script resource types for stored JavaScripts
craigfowler Mar 6, 2018
3447d3c
WIP #36 - Add script runner implementation
craigfowler Mar 6, 2018
e85cea7
WIP #36 - Add new script provider actions and refactor
craigfowler Mar 6, 2018
6832f34
WIP #36 - Replace base controller with action filter
craigfowler Mar 6, 2018
5f28a27
WIP #36 - Add Jasmine test framework
craigfowler Mar 6, 2018
100b3d6
WIP #36 - Add a simple script to be tested
craigfowler Mar 6, 2018
7cb313c
WIP #36 - Add a test harness for Jasmine-testing JavaScript resources
craigfowler Mar 6, 2018
fcab2a4
WIP #36 - Add tests for the first of the tested scripts
craigfowler Mar 6, 2018
a515677
Trivial - remove redundant code
craigfowler Mar 7, 2018
b82c85c
WIP #36 - Add new test which runs the testing harness for all scripts
craigfowler Mar 7, 2018
85979ed
WIP #36 - Refactor to improve reporting
craigfowler Mar 7, 2018
f985996
WIP #36 - Improve existing tests and add new script (localised date)
craigfowler Mar 7, 2018
2b59abd
WIP #36 - Update test for the script runner (expected script)
craigfowler Mar 8, 2018
55b63af
WIP #36 - Fix two mistakes in the script runner
craigfowler Mar 8, 2018
61e33cc
WIP #36 - Fix mistake in script runner
craigfowler Mar 8, 2018
6ad44d8
WIP #36 - Many improvements to the way that scripts execute
craigfowler Mar 8, 2018
3449205
Provisionally resolve #36 - Migrate the last script to the new archit…
craigfowler Mar 8, 2018
f68a64b
WIP #36 - Attempt to fix bug (web element instead of adapter)
craigfowler Mar 9, 2018
4579cd1
WIP #36 - Misc improvements
craigfowler Mar 9, 2018
9e66f1f
WIP #36 - Numerous changes and improvements
craigfowler Mar 10, 2018
a98dd83
WIP #36 - Upgrade NewtonSoft.JSON to fix compile warning
craigfowler Mar 10, 2018
2edf3e8
WIP #36 - Add test for set-value script
craigfowler Mar 10, 2018
3c1a898
WIP #36 - Fix name of script invoker factory
craigfowler Mar 10, 2018
d075ca8
Fix mistake when upgrading (addition of bad assembly)
craigfowler Mar 10, 2018
89e5e5b
Fix an unrelated issue in flags definition for IE
craigfowler Mar 10, 2018
94cefd3
Merge branch 'feature/36-JavaScript-improvements'
craigfowler Mar 10, 2018
5e8f372
Resolve #2 - Work around Firefox's inability to set HTML date inputs.…
craigfowler Mar 10, 2018
f1c1594
Fix assembly version binding for Newtonsoft.Json
craigfowler Mar 10, 2018
b6a87f0
Another attempt at fix for Newtonsoft.Json assembly bindings
craigfowler Mar 10, 2018
2d27ad3
Move JavaScript workarounds to separate library
craigfowler Mar 10, 2018
9fc61e6
Revert "WIP #36 - Upgrade NewtonSoft.JSON to fix compile warning"
craigfowler Mar 10, 2018
bbe4487
Move the date-input testing to a new page & controller of its own
craigfowler Mar 10, 2018
8ba09e9
Fix silly mistake
craigfowler Mar 10, 2018
1279109
Attempt a suggested fix to get Firefox dates working
craigfowler Mar 10, 2018
6ff142d
Revert "Attempt a suggested fix to get Firefox dates working"
craigfowler Mar 10, 2018
57df4c2
Reopened #2 and WIP - Add attribute-setting script
craigfowler Mar 10, 2018
97256d5
WIP #2 - Add tests for setting attributes
craigfowler Mar 10, 2018
2e5f8f1
WIP #2 - Fix issues with attributes
craigfowler Mar 10, 2018
b9b0237
WIP #2 - Implement new workaround
craigfowler Mar 10, 2018
61d50ab
Trivial - Add Travis & Appveyor build files to solution
craigfowler Mar 10, 2018
ca790d7
Temporary - Comment-out the attribute removal just in case it's not n…
craigfowler Mar 10, 2018
8302309
Temporary - Remove many of the build profiles for a quicker test-run
craigfowler Mar 10, 2018
bbac03a
Revert "Temporary - Remove many of the build profiles for a quicker t…
craigfowler Mar 10, 2018
c81d980
Resolve #2 - Remove obsolete code
craigfowler Mar 10, 2018
3f11b2c
Merge branch 'feature/2-date-still-not-working'
craigfowler Mar 10, 2018
0867c64
WIP #40 - Add the beginnings of the workaround script
craigfowler Mar 11, 2018
0acd050
WIP #40 - Complete the JavaScript portion of this
craigfowler Mar 11, 2018
8cf342b
WIP #40 - Reduce the size of the script a little
craigfowler Mar 11, 2018
d48ffc9
WIP #40 - Add C# actions for handling selection changes and improve s…
craigfowler Mar 11, 2018
60df2f8
Resolve #40 - Rename the browser flag accordingly
craigfowler Mar 11, 2018
79fc757
Merge branch 'feature/40-Select-deselect-workaround'
craigfowler Mar 11, 2018
ba8f972
Trivial - update doc comment
craigfowler Mar 11, 2018
fb8fb6f
Resolve #41 - Add new formatter
craigfowler Mar 11, 2018
8dd5d71
Fix mistake in #40 (wrong element)
craigfowler Mar 11, 2018
bed0984
WIP #5 - Add basic infrastructure for saving screenshots
craigfowler Mar 11, 2018
08a5cdb
WIP #5 - Add config for screenshots
craigfowler Mar 11, 2018
3bb3186
Provisionally resolve #5 - Add action, builder and tests
craigfowler Mar 11, 2018
1793631
Resolve #5 - Amend ignore rules
craigfowler Mar 11, 2018
8c8df68
Merge branch 'feature/5-Screenshots'
craigfowler Mar 11, 2018
bb825b8
Bump version numbers
craigfowler Mar 12, 2018
f119ac2
Merge branch 'release/0.3.0' into production
craigfowler Mar 12, 2018
7f02b8d
Merge tag 'v0.3.0'
craigfowler Mar 12, 2018
3cc05ef
Bump versions
craigfowler Mar 12, 2018
ebb36d7
Fix packaging error (dependency)
craigfowler Mar 12, 2018
08af68f
Merge branch 'release/0.3.1' into production
craigfowler Mar 12, 2018
ef2d432
Merge tag 'v0.3.1'
craigfowler Mar 12, 2018
59afbdd
Bump version numbers again (sigh)
craigfowler Mar 12, 2018
83b8e3a
Fix yet another packaging mistake (dependencies on Screenplay core)
craigfowler Mar 12, 2018
f2a7c73
Merge branch 'release/0.3.2' into production
craigfowler Mar 12, 2018
c58eaaa
Merge tag 'v0.3.2'
craigfowler Mar 12, 2018
df1868c
Resolve #5 - Reconfigure AppVeyor build
craigfowler Apr 30, 2018
fc5d05f
WIP #43 - Split up some of the larger test pages
craigfowler May 4, 2018
d9d512e
Update ChromeDriver (for local testing)
craigfowler May 4, 2018
b4264d3
Resolve #43 - Fix a couple of other tests
craigfowler May 4, 2018
44bc1c0
Merge branch 'feature/43-Separate-test-pages'
craigfowler May 4, 2018
d280c15
Merge branch 'master' of https://github.com/csf-dev/CSF.Screenplay.Se…
craigfowler May 4, 2018
ecf8fa7
Resolve #32 - Add assembly-wide timeout
craigfowler May 4, 2018
8307b50
Bump dependency versions
craigfowler May 4, 2018
4ab7ad4
Resolve #13 - Write new README
craigfowler May 4, 2018
8e7390d
Bump version numbers
craigfowler May 4, 2018
bf5a2d2
Fix URL in README
craigfowler May 4, 2018
490ea8b
Merge branch 'release/0.4.0' into production
craigfowler May 4, 2018
6205cb3
Merge tag 'v0.4.0'
craigfowler May 4, 2018
82a641e
Attempt to fix build failures: Downgrade to Mono 5.10.1
craigfowler May 11, 2018
30374ee
Upgrade CSF.Screenplay dependency
craigfowler Jun 30, 2018
8c82c17
Upgrade ZPT-Sharp dependency
craigfowler Jun 30, 2018
3ff53b3
Upgrade code to fix compile errors due to non-backwards-compatibility
craigfowler Jun 30, 2018
b8729cc
WIP #51 - Implement new web driver creation tracker
craigfowler Jun 30, 2018
428ce12
Add binding redirects to fix a compile warning
craigfowler Jun 30, 2018
936f8e7
Upgrade code to fix compile errors due to non-backwards-compatibility
craigfowler Jun 30, 2018
14973c4
Resolve #53 - Throw an exception for empty element collections
craigfowler Jun 30, 2018
bf16d98
Merge branch 'master' of https://github.com/csf-dev/CSF.Screenplay.Se…
craigfowler Jul 1, 2018
d14d3c3
Merge branch 'master' into feature/51-Avoid-marking-webdriver-needlessly
craigfowler Jul 1, 2018
2d26bfc
Merge branch 'master' into feature/53-Crash-on-empty-target
craigfowler Jul 1, 2018
3025cc0
Fix compile warning related to Newtonsoft.JSON version conflicts
craigfowler Jul 1, 2018
a420373
Ensure that AppVeyor pushes the report artifact
craigfowler Jul 1, 2018
f9f3f0d
Prevent Travis from echoing a raw JSON report to the console
craigfowler Jul 1, 2018
35a7ee6
Ensure that the unit tests always run
craigfowler Jul 1, 2018
cbb9710
Upgrade code to fix compile errors due to non-backwards-compatibility
craigfowler Jun 30, 2018
2149ab9
Fixes to ensure that the unit tests always run
craigfowler Jul 1, 2018
817e850
Trivial update to ignore rules
craigfowler Jul 1, 2018
dec440a
Merge branch 'feature/Avoid-needless-console-output'
craigfowler Jul 1, 2018
e5ecb2d
Fix AppVeyor running tests
craigfowler Jul 1, 2018
cb3722f
Attempt to fix build errors due to bad assembly bindings
craigfowler Jul 1, 2018
c7a375b
Add binding redirect for Moq
craigfowler Jul 1, 2018
b71ed80
Merge branch 'master' into feature/51-Avoid-marking-webdriver-needlessly
craigfowler Jul 1, 2018
87e871e
Merge branch 'feature/51-Avoid-marking-webdriver-needlessly'
craigfowler Jul 1, 2018
036b9d1
Merge branch 'master' into feature/53-Crash-on-empty-target
craigfowler Jul 1, 2018
56406fd
Merge branch 'feature/53-Crash-on-empty-target'
craigfowler Jul 1, 2018
1d5e61a
Trivial - remove a redundant file
craigfowler Jul 1, 2018
5fb4bac
Resolve #52 - Add builder types for matchers
craigfowler Jul 1, 2018
b445c8f
Merge branch 'feature/52-matcher-builders'
craigfowler Jul 1, 2018
2df6630
Fix build errors by moving types out of the class def
craigfowler Jul 1, 2018
a09feee
Bump version numbers
craigfowler Jul 1, 2018
bff1a2b
Fix dependency version in nuspec
craigfowler Jul 1, 2018
ea1c4cd
Merge branch 'release/0.5.0' into production
craigfowler Jul 1, 2018
e2459ca
Merge tag 'v0.5.0'
craigfowler Jul 1, 2018
4d41adc
Resolve #59 - Increase the default waiting time
craigfowler Mar 26, 2019
71253e4
Resolve #58 - Add default-timeout ability
craigfowler Mar 26, 2019
2a2c42d
Add unit test to cover #58
craigfowler Mar 26, 2019
c513723
Merge branch 'feature/58-wait-duration-ability'
craigfowler Mar 26, 2019
3111049
Resolve #60 - Fix unsupported browser selection
craigfowler Mar 27, 2019
e09df10
Attempt to fix failing build by specifying version
craigfowler Mar 27, 2019
412358e
Bump versions
craigfowler Mar 27, 2019
49a45cd
Update NuGet dependencies
craigfowler Mar 27, 2019
18c0dcb
Update nuspec with new license link
craigfowler Mar 27, 2019
734ce4c
Merge branch 'release/1.0.0' into production
craigfowler Mar 27, 2019
0644e78
Merge tag 'v1.0.0'
craigfowler Mar 27, 2019
c8d7f8e
Merge remote-tracking branch 'selenium/master' into 212-selenium-rewrite
Nov 4, 2024
bebcf99
Merge latest master into 212-selenium-rewrite
craigfowler Nov 8, 2024
a191420
WIP #212 - Rename project and remove unneeded solution
craigfowler Nov 8, 2024
7541b16
Exclude old projects from docs build
craigfowler Nov 8, 2024
0c5772f
Update build for pull request analysis
craigfowler Nov 8, 2024
0b46d50
Update build for PRs
craigfowler Nov 8, 2024
96131ce
Update build script for PRs
craigfowler Nov 8, 2024
c0e7743
Correct build script mistake
craigfowler Nov 8, 2024
83d3d01
Another attempt to fix build
craigfowler Nov 8, 2024
97f82d3
Attempt to fix build script
craigfowler Nov 8, 2024
ce6204b
Another attempt to fix the build
craigfowler Nov 8, 2024
73ed698
WIP #212 - Add empty Selenium project
craigfowler Nov 10, 2024
faf3771
WIP #212 - Lots of rewrite (might not build)
craigfowler Nov 15, 2024
b8ca231
Convert remaining select actinos
craigfowler Nov 17, 2024
0c64c03
WIP #212 - Move more performables
craigfowler Nov 20, 2024
66918e0
Lots of rewrite work toward #212
craigfowler Nov 26, 2024
980e1a2
WIP #212 - lots more work on rewrite
craigfowler Nov 27, 2024
bed1af1
WIP #212 - More conversion
craigfowler Nov 29, 2024
13c8c21
WIP #212 - Remove lots of redundant logic
craigfowler Nov 29, 2024
e284c42
WIP #212 - Begin work on waits
craigfowler Nov 30, 2024
d656d2f
WIP #212 - More work on waits
craigfowler Nov 30, 2024
2aea8b9
WIP #212 - More work on waits
craigfowler Dec 1, 2024
de03a8b
WIP #212 - Add empty test project
craigfowler Dec 5, 2024
5657cde
WIP #212 - now have one passing test
craigfowler Dec 8, 2024
4e5be89
WIP #212 - Attempt to fix test on Linux
craigfowler Dec 8, 2024
f5163bc
Another attempt to fix Linux build
craigfowler Dec 8, 2024
0c4d379
Fix typo
craigfowler Dec 8, 2024
e452402
Try to locate Chrome
craigfowler Dec 8, 2024
1409a29
Attempt to fix failing Linux build with custom Chrome config
craigfowler Dec 8, 2024
2a34878
Is it using my env var at all?
craigfowler Dec 8, 2024
e9af6f6
Temporarily just build on Linux
craigfowler Dec 8, 2024
6c7377c
Switch to double-underscore syntax
craigfowler Dec 8, 2024
43901bd
Remove unneeded debug code
craigfowler Dec 8, 2024
dd08ff1
Add ssh connection info to diagnose
craigfowler Dec 9, 2024
81628b4
Update project to force driver version
craigfowler Dec 9, 2024
6c1232b
Update appsettings.json
craigfowler Dec 9, 2024
7913078
Undo fiddling of ChromeDriver version
craigfowler Dec 9, 2024
f699311
Update appsettings.json
craigfowler Dec 9, 2024
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
17 changes: 11 additions & 6 deletions .appveyor.yml
Original file line number Diff line number Diff line change
@@ -1,9 +1,11 @@
environment:
matrix:
- APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2022
JAVA_HOME: C:\Program Files\Java\jdk17
#- APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2022
# JAVA_HOME: C:\Program Files\Java\jdk17
# "WebDriverFactory__SelectedConfiguration": DefaultChrome
- APPVEYOR_BUILD_WORKER_IMAGE: Ubuntu2204
JAVA_HOME: /usr/lib/jvm/jdk15
"WebDriverFactory__SelectedConfiguration": AppVeyorLinuxChrome

skip_branch_with_pr: true

Expand All @@ -26,17 +28,16 @@ before_build:
- dotnet --version
- dotnet restore --verbosity m
- dotnet clean
- cmd: >
IF NOT DEFINED APPVEYOR_PULL_REQUEST_HEAD_REPO_BRANCH (SET BranchName=%APPVEYOR_REPO_BRANCH%)
ELSE (SET BranchName=%APPVEYOR_PULL_REQUEST_HEAD_REPO_BRANCH%)
- cmd: Tools\appveyor-setup-env.bat
- cmd: >
dotnet-sonarscanner begin
/k:"csf-dev_CSF.Screenplay"
/v:AppVeyor_build_%APPVEYOR_BUILD_NUMBER%
/o:craigfowler-github
/d:sonar.host.url=https://sonarcloud.io
/d:sonar.token=%SONARCLOUD_SECRET_KEY%
/d:sonar.branch.name=%BranchName%
/d:%BranchParam%=%BranchName%
%PRParam%
/d:sonar.javascript.lcov.reportPaths=%APPVEYOR_BUILD_FOLDER%\CSF.Screenplay.JsonToHtmlReport.Template\src\TestResults\lcov.info
/s:%APPVEYOR_BUILD_FOLDER%\.sonarqube-analysisproperties.xml

Expand All @@ -61,3 +62,7 @@ after_test:
- ps: if ($isWindows) { Tools\appveyor-upload-test-results.ps1 }
- cmd: dotnet build -c Docs
- ps: if ($isWindows) { Tools\appveyor_publish_docs.ps1 }

on_finish:
- sh: export APPVEYOR_SSH_BLOCK=true
- sh: curl -sflL 'https://raw.githubusercontent.com/appveyor/ci/master/scripts/enable-ssh.sh' | bash -e -
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -4,5 +4,6 @@ obj/
TestResults/
Tests/**/*.feature.cs
node_modules/
*.orig
/CSF.Screenplay.JsonToHtmlReport/template/
/CSF.Screenplay.JsonToHtmlReport.Template/src/output/
15 changes: 15 additions & 0 deletions .vscode/launch.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
{
// Use IntelliSense to learn about possible attributes.
// Hover to view descriptions of existing attributes.
// For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
"version": "0.2.0",
"configurations": [
{
"type": "dotnet",
"projectPath": "${workspaceFolder}/Tests/CSF.Screenplay.Selenium.TestWebapp/CSF.Screenplay.Selenium.TestWebapp.csproj",
"name": "Selenium testing web app",
"request": "launch",

}
]
}
39 changes: 39 additions & 0 deletions CSF.Screenplay.Abstractions/Abilities/GetAssetFilePaths.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
using CSF.Screenplay.Reporting;

namespace CSF.Screenplay.Abilities
{
/// <summary>
/// Screenplay ability which gets the file system path for asset files generated by actors participating in the current performance.
/// </summary>
public class GetAssetFilePaths
{
readonly IGetsAssetFilePath pathProvider;

/// <summary>
/// Gets the file system path for the specified asset file.
/// </summary>
/// <remarks>
/// <para>
/// The returned file system path is an absolute path to which the asset file should be written. The path is determined by the
/// logic of the service <see cref="IGetsAssetFilePath"/>. This means that the final filename will not be identical to the
/// <paramref name="baseName"/> but will include that base name within it.
/// </para>
/// <para>
/// If this method returns <see langword="null" /> then the asset file should not be written to the file system.
/// </para>
/// </remarks>
/// <param name="baseName">A short descriptive file name fragment for the asset file, including the file extension.</param>
/// <returns>The asset file path.</returns>
/// <seealso cref="IGetsAssetFilePath.GetAssetFilePath(string)"/>
public string GetAssetFilePath(string baseName) => pathProvider.GetAssetFilePath(baseName);

/// <summary>
/// Initializes a new instance of the <see cref="GetAssetFilePaths"/> class.
/// </summary>
/// <param name="pathProvider">The path provider used to get asset file paths.</param>
public GetAssetFilePaths(IGetsAssetFilePath pathProvider)
{
this.pathProvider = pathProvider ?? throw new System.ArgumentNullException(nameof(pathProvider));
}
}
}
3 changes: 2 additions & 1 deletion CSF.Screenplay.Abstractions/Actor.performer.cs
Original file line number Diff line number Diff line change
Expand Up @@ -79,7 +79,8 @@ protected virtual ValueTask<T> PerformAsync<T>(IPerformableWithResult<T> perform

PerformableException GetPerformableException(object performable, Exception ex)
{
return new PerformableException($"{Name} encountered an unexpected exception whilst performing a performable of type {performable.GetType().FullName}", ex)

return new PerformableException($"{Name} encountered an unexpected exception whilst executing the performable logic of {performable.GetType().FullName}", ex)
{
Performable = performable,
};
Expand Down
36 changes: 36 additions & 0 deletions CSF.Screenplay.Abstractions/ActorExtensions.abilities.cs
Original file line number Diff line number Diff line change
Expand Up @@ -80,6 +80,42 @@ public static object GetAbility(this ICanPerform actor, Type abilityType)
?? throw new InvalidOperationException($"{((IHasName) actor).Name} must have an ability of type {abilityType.FullName}");
}

/// <summary>Tries to get the first ability which the actor has of the specified type</summary>
/// <param name="actor">The actor from whom to get the ability</param>
/// <param name="ability">If this method returns <see langword="true" /> then this exposes the strongly-typed ability; if not then this value is undefined</param>
/// <typeparam name="T">The type of ability desired</typeparam>
/// <returns><see langword="true" /> if the actor has an ability of the specified type; <see langword="false" /> if not.</returns>
/// <exception cref="ArgumentNullException">If the <paramref name="actor"/> is <see langword="null" /></exception>
/// <exception cref="ArgumentException">If the actor does not implement <see cref="IHasAbilities"/></exception>
public static bool TryGetAbility<T>(this ICanPerform actor, out T ability)
{
ability = default;
if (!TryGetAbility(actor, typeof(T), out var untypedAbility)) return false;
ability = (T) untypedAbility;
return true;
}

/// <summary>Gets the first ability which the actor has of the specified type</summary>
/// <param name="actor">The actor from whom to get the ability</param>
/// <param name="abilityType">The type of ability desired</param>
/// <param name="ability">If this method returns <see langword="true" /> then this exposes the strongly-typed ability; if not then this value is undefined</param>
/// <returns><see langword="true" /> if the actor has an ability of the specified type; <see langword="false" /> if not.</returns>
/// <exception cref="ArgumentNullException">If any parameter is <see langword="null" /></exception>
public static bool TryGetAbility(this ICanPerform actor, Type abilityType, out object ability)
{
if(actor is null) throw new ArgumentNullException(nameof(actor));
if(abilityType is null) throw new ArgumentNullException(nameof(abilityType));

if(!actor.HasAbility(abilityType))
{
ability = default;
return false;
}

ability = actor.GetAbility(abilityType);
return true;
}

/// <summary>Adds an ability to the specified actor</summary>
/// <param name="actor">The actor from whom to get the ability</param>
/// <param name="ability">The ability to add to the actor</param>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -103,17 +103,15 @@ public interface IRelaysPerformanceEvents
/// <summary>
/// Invokes an event indicating that a <see cref="IPerformance"/> has begun.
/// </summary>
/// <param name="performanceIdentity">The performance identity</param>
/// <param name="namingHierarchy">The performance's hierarchical name</param>
void InvokePerformanceBegun(Guid performanceIdentity, IList<IdentifierAndName> namingHierarchy);
/// <param name="performance">The performance</param>
void InvokePerformanceBegun(IPerformance performance);

/// <summary>
/// Invokes an event indicating that a <see cref="IPerformance"/> has finished.
/// </summary>
/// <param name="performanceIdentity">The performance identity</param>
/// <param name="namingHierarchy">The performance's hierarchical name</param>
/// <param name="performance">The performance</param>
/// <param name="success">A value indicating whether or not the performance was a success</param>
void InvokePerformanceFinished(Guid performanceIdentity, IList<IdentifierAndName> namingHierarchy, bool? success);
void InvokePerformanceFinished(IPerformance performance, bool? success);

#endregion

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -34,13 +34,10 @@ public class PerformanceFinishedEventArgs : PerformanceEventArgs
public bool? Success { get; }

/// <summary>Initialises a new instance of <see cref="PerformanceEventArgs"/></summary>
/// <param name="performanceIdentity">The performance identity</param>
/// <param name="namingHierarchy">The scenario hierarchy</param>
/// <param name="performance">The performance.</param>
/// <param name="success">A value indicating whether or not the scenario completed with a succeess result</param>
/// <exception cref="ArgumentNullException">If the scenario hierarchy is <see langword="null" /></exception>
public PerformanceFinishedEventArgs(Guid performanceIdentity,
IReadOnlyList<IdentifierAndName> namingHierarchy,
bool? success) : base(performanceIdentity, namingHierarchy)
public PerformanceFinishedEventArgs(IPerformance performance, bool? success) : base(performance)
{
Success = success;
}
Expand Down
14 changes: 9 additions & 5 deletions CSF.Screenplay.Abstractions/Performances/PerformanceEventArgs.cs
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,11 @@ namespace CSF.Screenplay.Performances
/// <seealso cref="PerformanceScopeEventArgs"/>
public class PerformanceEventArgs : PerformanceScopeEventArgs
{
/// <summary>
/// Gets the <see cref="IPerformance"/> to which this event relates.
/// </summary>
public IPerformance Performance { get; }

/// <summary>Gets an ordered list of identifiers which indicate the <see cref="IPerformance"/>'s name within an organisational hierarchy.</summary>
/// <remarks>
/// <para>
Expand All @@ -18,15 +23,14 @@ public class PerformanceEventArgs : PerformanceScopeEventArgs
/// </remarks>
/// <seealso cref="IPerformance"/>
/// <seealso cref="IPerformance.NamingHierarchy"/>
public IReadOnlyList<IdentifierAndName> NamingHierarchy { get; }
public IReadOnlyList<IdentifierAndName> NamingHierarchy => Performance.NamingHierarchy;

/// <summary>Initialises a new instance of <see cref="PerformanceEventArgs"/></summary>
/// <param name="performanceIdentity">The performance identity</param>
/// <param name="namingHierarchy">The screenplay naming hierarchy</param>
/// <param name="performance">The performance</param>
/// <exception cref="ArgumentNullException">If the scenario hierarchy is <see langword="null" /></exception>
public PerformanceEventArgs(Guid performanceIdentity, IReadOnlyList<IdentifierAndName> namingHierarchy) : base(performanceIdentity)
public PerformanceEventArgs(IPerformance performance) : base(performance.PerformanceIdentity)
{
NamingHierarchy = namingHierarchy ?? throw new ArgumentNullException(nameof(namingHierarchy));
Performance = performance;
}
}
}
29 changes: 29 additions & 0 deletions CSF.Screenplay.Abstractions/Reporting/IGetsAssetFilePath.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
namespace CSF.Screenplay.Reporting
{
/// <summary>
/// A service which gets a filesystem path to which Screenplay asset files should be written, if they are to be written at all.
/// </summary>
public interface IGetsAssetFilePath
{
/// <summary>
/// Gets the filesystem path to which an asset file should be written.
/// </summary>
/// <remarks>
/// <para>
/// If reporting is disabled, for the same reasons as <see cref="IGetsReportPath.GetReportPath"/> would return <see langword="null" />,
/// then this method will also return <see langword="null" />.
/// In that case, reporting is disabled and no asset files should be written to the file system.
/// </para>
/// <para>
/// If reporting is enabled, then this method should return an absolute file system path to which an asset file should be written,
/// where the asset has the specified 'base name'. That base name should be a short filename fragment which describes the asset.
/// This file name will be embellished with other information by this method, such as to ensure that the file name is unique within
/// the current Screenplay run.
/// </para>
/// </remarks>
/// <param name="baseName">A short &amp; descriptive filename fragment, which includes the file extension but no path information</param>
/// <returns>An absolute file system path at which the asset file should be saved, or a <see langword="null" /> reference indicating that
/// the asset file should not be saved.</returns>
string GetAssetFilePath(string baseName);
}
}
26 changes: 26 additions & 0 deletions CSF.Screenplay.Abstractions/Reporting/IGetsReportPath.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
namespace CSF.Screenplay.Reporting
{
/// <summary>
/// A service which gets the path to which the Screenplay report should be written.
/// </summary>
public interface IGetsReportPath
{
/// <summary>
/// Gets the path to which the report should be written.
/// </summary>
/// <remarks>
/// <para>
/// If the returned path is <see langword="null" /> then Screenplay's reporting functionality should be disabled and no report should be written.
/// Otherwise, implementations of this interface should return an absolute file system path to which the report should be written.
/// This path must be writable by the executing process.
/// </para>
/// <para>
/// Reporting could be disabled if either the Screenplay Options report path is <see langword="null" /> or a whitespace-only string, or if the path
/// indicated by those options is not writable.
/// </para>
/// </remarks>
/// <returns>The report path.</returns>
string GetReportPath();
}
}

4 changes: 2 additions & 2 deletions CSF.Screenplay.Docs/docfx.json
Original file line number Diff line number Diff line change
Expand Up @@ -9,8 +9,8 @@
"docs/**",
"**/bin/**",
"**/obj/**",
"Tests_old/**",
"Tests/**"
"Tests/**",
"*_old/**"
]
}
],
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,9 @@
<NoWarn>NU1903,NU1902</NoWarn>
<RootNamespace>CSF.Screenplay.JsonToHtmlReport</RootNamespace>
<DocumentationFile>$(MSBuildProjectDirectory)\bin\$(Configuration)\$(TargetFramework)\$(AssemblyName).xml</DocumentationFile>
<!-- It's true that netcoreapp3.1 is already long out of support and net6.0 will be soon, but these are only here for backwards compatibility.
This project is multi-targeted and includes up-to-date TFMs -->
<CheckEolTargetFramework>false</CheckEolTargetFramework>
</PropertyGroup>

<ItemGroup>
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
using System;
using Ploeh.AutoFixture;
using Ploeh.AutoFixture.AutoMoq;
using Ploeh.AutoFixture.NUnit3;

namespace CSF.Screenplay.Selenium.Tests
{
public class AutoMoqDataAttribute : AutoDataAttribute
{
public AutoMoqDataAttribute() : base(new Fixture().Customize(new AutoMoqCustomization()))
{
}
}
}
Loading