├── java-selenium-code.md
├── todo-web-application
└── src
│ ├── main
│ ├── resources
│ │ ├── static
│ │ │ ├── less
│ │ │ │ ├── mixins.less
│ │ │ │ └── variables.less
│ │ │ ├── .gitignore
│ │ │ ├── vendor
│ │ │ │ ├── font-awesome
│ │ │ │ │ ├── less
│ │ │ │ │ │ ├── extras.less
│ │ │ │ │ │ ├── screen-reader.less
│ │ │ │ │ │ ├── fixed-width.less
│ │ │ │ │ │ ├── larger.less
│ │ │ │ │ │ ├── list.less
│ │ │ │ │ │ ├── core.less
│ │ │ │ │ │ ├── stacked.less
│ │ │ │ │ │ ├── font-awesome.less
│ │ │ │ │ │ ├── bordered-pulled.less
│ │ │ │ │ │ ├── spinning.less
│ │ │ │ │ │ ├── rotated-flipped.less
│ │ │ │ │ │ ├── path.less
│ │ │ │ │ │ ├── animated.less
│ │ │ │ │ │ └── mixins.less
│ │ │ │ │ ├── scss
│ │ │ │ │ │ ├── _fixed-width.scss
│ │ │ │ │ │ ├── _screen-reader.scss
│ │ │ │ │ │ ├── _larger.scss
│ │ │ │ │ │ ├── _list.scss
│ │ │ │ │ │ ├── _core.scss
│ │ │ │ │ │ ├── font-awesome.scss
│ │ │ │ │ │ ├── _stacked.scss
│ │ │ │ │ │ ├── _bordered-pulled.scss
│ │ │ │ │ │ ├── _spinning.scss
│ │ │ │ │ │ ├── _rotated-flipped.scss
│ │ │ │ │ │ ├── _path.scss
│ │ │ │ │ │ ├── _animated.scss
│ │ │ │ │ │ ├── _extras.scss
│ │ │ │ │ │ └── _mixins.scss
│ │ │ │ │ ├── fonts
│ │ │ │ │ │ ├── FontAwesome.otf
│ │ │ │ │ │ ├── fontawesome-webfont.eot
│ │ │ │ │ │ ├── fontawesome-webfont.ttf
│ │ │ │ │ │ ├── fontawesome-webfont.woff
│ │ │ │ │ │ └── fontawesome-webfont.woff2
│ │ │ │ │ └── HELP-US-OUT.txt
│ │ │ │ ├── datatables
│ │ │ │ │ ├── images
│ │ │ │ │ │ ├── favicon.ico
│ │ │ │ │ │ ├── sort_asc.png
│ │ │ │ │ │ ├── sort_both.png
│ │ │ │ │ │ ├── sort_desc.png
│ │ │ │ │ │ ├── Sorting icons.psd
│ │ │ │ │ │ ├── sort_asc_disabled.png
│ │ │ │ │ │ └── sort_desc_disabled.png
│ │ │ │ │ ├── js
│ │ │ │ │ │ ├── dataTables.bootstrap.min.js
│ │ │ │ │ │ ├── dataTables.bootstrap4.min.js
│ │ │ │ │ │ ├── dataTables.foundation.min.js
│ │ │ │ │ │ ├── dataTables.material.min.js
│ │ │ │ │ │ ├── dataTables.semanticui.min.js
│ │ │ │ │ │ ├── dataTables.uikit.min.js
│ │ │ │ │ │ └── dataTables.jqueryui.min.js
│ │ │ │ │ └── css
│ │ │ │ │ │ ├── dataTables.material.min.css
│ │ │ │ │ │ ├── dataTables.foundation.min.css
│ │ │ │ │ │ ├── dataTables.semanticui.min.css
│ │ │ │ │ │ └── dataTables.material.css
│ │ │ │ ├── bootstrap
│ │ │ │ │ └── fonts
│ │ │ │ │ │ ├── glyphicons-halflings-regular.eot
│ │ │ │ │ │ ├── glyphicons-halflings-regular.ttf
│ │ │ │ │ │ ├── glyphicons-halflings-regular.woff
│ │ │ │ │ │ └── glyphicons-halflings-regular.woff2
│ │ │ │ ├── morrisjs
│ │ │ │ │ └── morris.css
│ │ │ │ ├── metisMenu
│ │ │ │ │ ├── metisMenu.min.css
│ │ │ │ │ ├── metisMenu.css
│ │ │ │ │ └── metisMenu.min.js
│ │ │ │ ├── datatables-plugins
│ │ │ │ │ └── dataTables.bootstrap.min.js
│ │ │ │ └── flot
│ │ │ │ │ └── jquery.flot.symbol.js
│ │ │ ├── pages
│ │ │ │ ├── frames-example.html
│ │ │ │ └── sortable.html
│ │ │ ├── index.html
│ │ │ ├── package.json
│ │ │ ├── dist
│ │ │ │ └── js
│ │ │ │ │ ├── sb-admin-2.min.js
│ │ │ │ │ └── sb-admin-2.js
│ │ │ ├── LICENSE
│ │ │ ├── bower.json
│ │ │ ├── js
│ │ │ │ └── sb-admin-2.js
│ │ │ └── README.md
│ │ ├── application.properties
│ │ └── data.sql
│ ├── webapp
│ │ └── WEB-INF
│ │ │ └── jsp
│ │ │ ├── file-upload-successful.jsp
│ │ │ ├── error.jsp
│ │ │ ├── welcome.jsp
│ │ │ ├── common
│ │ │ ├── footer.jspf
│ │ │ ├── header.jspf
│ │ │ └── navigation.jspf
│ │ │ ├── login.jsp
│ │ │ ├── todo.jsp
│ │ │ └── list-todos.jsp
│ └── java
│ │ └── com
│ │ └── in28minutes
│ │ └── springboot
│ │ └── web
│ │ ├── SpringBootFirstWebApplication.java
│ │ ├── controller
│ │ ├── LogoutController.java
│ │ ├── WelcomeController.java
│ │ ├── ErrorController.java
│ │ ├── FileUploadController.java
│ │ └── LoginController.java
│ │ ├── service
│ │ ├── LoginService.java
│ │ ├── TodoRepository.java
│ │ └── TodoService.java
│ │ └── model
│ │ └── Todo.java
│ └── test
│ └── java
│ └── com
│ └── in28minutes
│ └── springboot
│ └── web
│ └── SpringBootFirstWebApplicationTests.java
├── html-basics
├── in28minutes-logo.png
├── 1-first-html.html
├── style.css
├── 5-nesting-and-more.html
├── 4-miscellaneous.html
├── 3-tables.html
├── 2-second-html.html
└── 6-form.html
├── web-driver-4-data-driven-tests
├── src
│ └── test
│ │ ├── resources
│ │ ├── login-data.csv
│ │ └── login-data.xlsx
│ │ └── java
│ │ └── com
│ │ └── in28minutes
│ │ └── datadriventests
│ │ ├── SuccessfulLoginBasicTest.java
│ │ ├── UnSuccessfulLoginBasicTest.java
│ │ ├── UnSuccessfulLoginDataDrivenBasicTest.java
│ │ ├── UnSuccessfulLoginDataDrivenLevel1Test.java
│ │ ├── ExcelReadUtil.java
│ │ ├── LoginDataProviderCompleteTest.java
│ │ └── LoginDataProviderCompleteExcelTest.java
└── pom.xml
├── testng-basics
├── src
│ └── test
│ │ └── java
│ │ └── com
│ │ ├── in28minutes
│ │ └── test
│ │ │ └── testng
│ │ │ ├── MultipleBrowserTest.java
│ │ │ ├── FirstSeleniumTestNgTest.java
│ │ │ └── FirstTestngTest.java
│ │ └── example
│ │ └── tests
│ │ ├── FacebookLogin.java
│ │ └── GoogleSearchForIn28minutes.java
├── testng.xml
└── pom.xml
├── .gitignore
├── web-driver-5-page-object-model
├── src
│ └── test
│ │ └── java
│ │ └── com
│ │ └── in28minutes
│ │ └── pageobjects
│ │ └── updatetodo
│ │ ├── WelcomePage.java
│ │ ├── ListTodoPage.java
│ │ ├── TodoPage.java
│ │ ├── LoginPage.java
│ │ ├── UpdateTodoBasicTest5AfterExercises.java
│ │ ├── UpdateTodoBasicTest.java
│ │ ├── UpdateTodoBasicTest1BeforePageObjects.java
│ │ ├── UpdateTodoBasicTest3AfterListTodoPage.java
│ │ └── UpdateTodoBasicTest2AfterLoginPage.java
└── pom.xml
├── web-driver-3-cross-browser-framework
├── testng.xml
├── src
│ └── test
│ │ └── java
│ │ └── com
│ │ └── in28minutes
│ │ └── selenium
│ │ └── crossbrowser
│ │ └── framework
│ │ └── CrossBrowserFrameworkTest.java
└── pom.xml
├── web-driver-2-more-scenarios
├── testng.xml
├── src
│ └── test
│ │ └── java
│ │ └── com
│ │ └── in28minutes
│ │ └── webdriver
│ │ ├── scenarios
│ │ ├── framework
│ │ │ └── TableReader.java
│ │ ├── TakesScreenshotTest.java
│ │ ├── FramesTest.java
│ │ ├── RunJavaScriptTest.java
│ │ ├── JavaScriptAlertTest.java
│ │ ├── ReadTablesTest.java
│ │ ├── PlayingWithScreenWindowTest.java
│ │ ├── ActionsBasicTest.java
│ │ └── NewWindowTest.java
│ │ └── basics
│ │ └── AbstractChromeWebDriverTest.java
└── pom.xml
├── web-driver-1-basics
├── src
│ └── test
│ │ └── java
│ │ └── com
│ │ └── in28minutes
│ │ └── webdriver
│ │ ├── basics
│ │ ├── WebDriverBasicsLocatorsWithClassTest.java
│ │ ├── AbstractChromeWebDriverTest.java
│ │ ├── WebDriverBasicsLocatorsWithLinkTextTest.java
│ │ ├── form
│ │ │ ├── FormElementTextTest.java
│ │ │ └── FormElementSelectTest.java
│ │ ├── WebDriverBasicsLocatorsWithXPathSelectorTest.java
│ │ ├── WebDriverBasicsLocatorsPerformanceTest.java
│ │ ├── WebDriverBasicsLocatorsWithTagTest.java
│ │ ├── WebDriverBasicsLocatorsWithIdTest.java
│ │ ├── WebDriverBasicsLocatorsWithCSSSelectorTest.java
│ │ └── WebDriverBasicsLocatorsWithNameTest.java
│ │ └── login
│ │ ├── StaticLoginTest.java
│ │ └── FirstWebApplicationLoginTest.java
└── pom.xml
├── junit-basics
├── pom.xml
└── src
│ └── test
│ └── java
│ └── com
│ ├── in28minutes
│ └── tests
│ │ ├── FirstSeleniumJUnitTest.java
│ │ └── FirstJUnitTest.java
│ └── example
│ └── tests
│ ├── GoogleSearchForIn28minutes.java
│ ├── FacebookLogin.java
│ └── FacebookLoginDummy.java
└── web-driver-6-stand-alone-and-grid
├── pom.xml
└── src
└── test
└── java
└── com
└── in28minutes
├── SeleniumStandAloneTest.java
└── SeleniumHubTest.java
/java-selenium-code.md:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/todo-web-application/src/main/resources/static/less/mixins.less:
--------------------------------------------------------------------------------
1 | // Mixins
2 |
--------------------------------------------------------------------------------
/todo-web-application/src/main/resources/static/.gitignore:
--------------------------------------------------------------------------------
1 | node_modules
2 | bower_components
--------------------------------------------------------------------------------
/todo-web-application/src/main/resources/static/vendor/font-awesome/less/extras.less:
--------------------------------------------------------------------------------
1 | // Extras
2 | // --------------------------
3 |
--------------------------------------------------------------------------------
/todo-web-application/src/main/webapp/WEB-INF/jsp/file-upload-successful.jsp:
--------------------------------------------------------------------------------
1 |
2 | ${message}
3 |
--------------------------------------------------------------------------------
/html-basics/in28minutes-logo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/in28minutes/automation-testing-with-java-and-selenium/HEAD/html-basics/in28minutes-logo.png
--------------------------------------------------------------------------------
/web-driver-4-data-driven-tests/src/test/resources/login-data.csv:
--------------------------------------------------------------------------------
1 | in28minutes,dummy,true
2 | adam,adam,false
3 | adam,adam@123,true
4 | eve,eve,false
5 | eve,eve@123,true
6 | in28minutes,eve@123,false
--------------------------------------------------------------------------------
/html-basics/1-first-html.html:
--------------------------------------------------------------------------------
1 |
2 |
3 | Learn Selenium and HTML
4 |
5 |
6 |
7 | This is the body of the page.
8 |
9 |
--------------------------------------------------------------------------------
/web-driver-4-data-driven-tests/src/test/resources/login-data.xlsx:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/in28minutes/automation-testing-with-java-and-selenium/HEAD/web-driver-4-data-driven-tests/src/test/resources/login-data.xlsx
--------------------------------------------------------------------------------
/todo-web-application/src/main/resources/static/vendor/font-awesome/less/screen-reader.less:
--------------------------------------------------------------------------------
1 | // Screen Readers
2 | // -------------------------
3 |
4 | .sr-only { .sr-only(); }
5 | .sr-only-focusable { .sr-only-focusable(); }
6 |
--------------------------------------------------------------------------------
/todo-web-application/src/main/resources/static/vendor/font-awesome/less/fixed-width.less:
--------------------------------------------------------------------------------
1 | // Fixed Width Icons
2 | // -------------------------
3 | .@{fa-css-prefix}-fw {
4 | width: (18em / 14);
5 | text-align: center;
6 | }
7 |
--------------------------------------------------------------------------------
/todo-web-application/src/main/resources/static/vendor/font-awesome/scss/_fixed-width.scss:
--------------------------------------------------------------------------------
1 | // Fixed Width Icons
2 | // -------------------------
3 | .#{$fa-css-prefix}-fw {
4 | width: (18em / 14);
5 | text-align: center;
6 | }
7 |
--------------------------------------------------------------------------------
/todo-web-application/src/main/resources/application.properties:
--------------------------------------------------------------------------------
1 | spring.mvc.view.prefix=/WEB-INF/jsp/
2 | spring.mvc.view.suffix=.jsp
3 | logging.level.org.springframework.web=INFO
4 |
5 | spring.jpa.show-sql=true
6 | spring.h2.console.enabled=true
--------------------------------------------------------------------------------
/todo-web-application/src/main/resources/static/vendor/font-awesome/scss/_screen-reader.scss:
--------------------------------------------------------------------------------
1 | // Screen Readers
2 | // -------------------------
3 |
4 | .sr-only { @include sr-only(); }
5 | .sr-only-focusable { @include sr-only-focusable(); }
6 |
--------------------------------------------------------------------------------
/todo-web-application/src/main/resources/static/pages/frames-example.html:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/todo-web-application/src/main/resources/static/vendor/datatables/images/favicon.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/in28minutes/automation-testing-with-java-and-selenium/HEAD/todo-web-application/src/main/resources/static/vendor/datatables/images/favicon.ico
--------------------------------------------------------------------------------
/todo-web-application/src/main/resources/static/vendor/datatables/images/sort_asc.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/in28minutes/automation-testing-with-java-and-selenium/HEAD/todo-web-application/src/main/resources/static/vendor/datatables/images/sort_asc.png
--------------------------------------------------------------------------------
/todo-web-application/src/main/resources/static/vendor/datatables/images/sort_both.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/in28minutes/automation-testing-with-java-and-selenium/HEAD/todo-web-application/src/main/resources/static/vendor/datatables/images/sort_both.png
--------------------------------------------------------------------------------
/todo-web-application/src/main/resources/static/vendor/datatables/images/sort_desc.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/in28minutes/automation-testing-with-java-and-selenium/HEAD/todo-web-application/src/main/resources/static/vendor/datatables/images/sort_desc.png
--------------------------------------------------------------------------------
/todo-web-application/src/main/resources/static/vendor/datatables/images/Sorting icons.psd:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/in28minutes/automation-testing-with-java-and-selenium/HEAD/todo-web-application/src/main/resources/static/vendor/datatables/images/Sorting icons.psd
--------------------------------------------------------------------------------
/todo-web-application/src/main/resources/static/vendor/font-awesome/fonts/FontAwesome.otf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/in28minutes/automation-testing-with-java-and-selenium/HEAD/todo-web-application/src/main/resources/static/vendor/font-awesome/fonts/FontAwesome.otf
--------------------------------------------------------------------------------
/todo-web-application/src/main/resources/static/vendor/datatables/images/sort_asc_disabled.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/in28minutes/automation-testing-with-java-and-selenium/HEAD/todo-web-application/src/main/resources/static/vendor/datatables/images/sort_asc_disabled.png
--------------------------------------------------------------------------------
/todo-web-application/src/main/resources/static/vendor/datatables/images/sort_desc_disabled.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/in28minutes/automation-testing-with-java-and-selenium/HEAD/todo-web-application/src/main/resources/static/vendor/datatables/images/sort_desc_disabled.png
--------------------------------------------------------------------------------
/todo-web-application/src/main/resources/static/vendor/font-awesome/fonts/fontawesome-webfont.eot:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/in28minutes/automation-testing-with-java-and-selenium/HEAD/todo-web-application/src/main/resources/static/vendor/font-awesome/fonts/fontawesome-webfont.eot
--------------------------------------------------------------------------------
/todo-web-application/src/main/resources/static/vendor/font-awesome/fonts/fontawesome-webfont.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/in28minutes/automation-testing-with-java-and-selenium/HEAD/todo-web-application/src/main/resources/static/vendor/font-awesome/fonts/fontawesome-webfont.ttf
--------------------------------------------------------------------------------
/todo-web-application/src/main/resources/static/vendor/font-awesome/fonts/fontawesome-webfont.woff:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/in28minutes/automation-testing-with-java-and-selenium/HEAD/todo-web-application/src/main/resources/static/vendor/font-awesome/fonts/fontawesome-webfont.woff
--------------------------------------------------------------------------------
/todo-web-application/src/main/webapp/WEB-INF/jsp/error.jsp:
--------------------------------------------------------------------------------
1 | <%@ include file="common/header.jspf"%>
2 | <%@ include file="common/navigation.jspf"%>
3 |
4 | An exception occurred! Please contact Support!
5 |
6 | <%@ include file="common/footer.jspf"%>
--------------------------------------------------------------------------------
/todo-web-application/src/main/resources/static/vendor/font-awesome/fonts/fontawesome-webfont.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/in28minutes/automation-testing-with-java-and-selenium/HEAD/todo-web-application/src/main/resources/static/vendor/font-awesome/fonts/fontawesome-webfont.woff2
--------------------------------------------------------------------------------
/todo-web-application/src/main/resources/static/vendor/bootstrap/fonts/glyphicons-halflings-regular.eot:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/in28minutes/automation-testing-with-java-and-selenium/HEAD/todo-web-application/src/main/resources/static/vendor/bootstrap/fonts/glyphicons-halflings-regular.eot
--------------------------------------------------------------------------------
/todo-web-application/src/main/resources/static/vendor/bootstrap/fonts/glyphicons-halflings-regular.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/in28minutes/automation-testing-with-java-and-selenium/HEAD/todo-web-application/src/main/resources/static/vendor/bootstrap/fonts/glyphicons-halflings-regular.ttf
--------------------------------------------------------------------------------
/todo-web-application/src/main/resources/static/vendor/bootstrap/fonts/glyphicons-halflings-regular.woff:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/in28minutes/automation-testing-with-java-and-selenium/HEAD/todo-web-application/src/main/resources/static/vendor/bootstrap/fonts/glyphicons-halflings-regular.woff
--------------------------------------------------------------------------------
/todo-web-application/src/main/resources/static/vendor/bootstrap/fonts/glyphicons-halflings-regular.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/in28minutes/automation-testing-with-java-and-selenium/HEAD/todo-web-application/src/main/resources/static/vendor/bootstrap/fonts/glyphicons-halflings-regular.woff2
--------------------------------------------------------------------------------
/todo-web-application/src/main/webapp/WEB-INF/jsp/welcome.jsp:
--------------------------------------------------------------------------------
1 | <%@ include file="common/header.jspf"%>
2 | <%@ include file="common/navigation.jspf"%>
3 |
4 | Welcome ${name}!!
Click here to manage your
5 | todo's.
6 |
7 | <%@ include file="common/footer.jspf"%>
--------------------------------------------------------------------------------
/html-basics/style.css:
--------------------------------------------------------------------------------
1 | label {
2 | font-size: 16px;
3 | color: #111111;
4 | }
5 |
6 | input, textarea, select {
7 | background-color: antiquewhite;
8 | }
9 |
10 | fieldset {
11 | border: 0px;
12 | padding: 20px;
13 | background-color: #EEFFFF;
14 | }
15 |
16 | ul {
17 | background-color: #EEFFEE;
18 | }
19 |
20 | li {
21 | color: #666666;
22 | }
23 |
--------------------------------------------------------------------------------
/testng-basics/src/test/java/com/in28minutes/test/testng/MultipleBrowserTest.java:
--------------------------------------------------------------------------------
1 | package com.in28minutes.test.testng;
2 |
3 | import org.testng.annotations.Parameters;
4 | import org.testng.annotations.Test;
5 |
6 | public class MultipleBrowserTest {
7 |
8 | @Parameters("browser")
9 | @Test
10 | public void runInBrowser(String browser) {
11 | System.out.println(browser);
12 | }
13 | }
14 |
--------------------------------------------------------------------------------
/todo-web-application/src/main/resources/static/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | SB Admin 2
6 |
9 |
10 |
11 | Go to /pages/index.html
12 |
13 |
14 |
--------------------------------------------------------------------------------
/todo-web-application/src/main/resources/static/vendor/font-awesome/HELP-US-OUT.txt:
--------------------------------------------------------------------------------
1 | I hope you love Font Awesome. If you've found it useful, please do me a favor and check out my latest project,
2 | Fort Awesome (https://fortawesome.com). It makes it easy to put the perfect icons on your website. Choose from our awesome,
3 | comprehensive icon sets or copy and paste your own.
4 |
5 | Please. Check it out.
6 |
7 | -Dave Gandy
8 |
--------------------------------------------------------------------------------
/todo-web-application/src/main/webapp/WEB-INF/jsp/common/footer.jspf:
--------------------------------------------------------------------------------
1 |
2 |
3 |
5 |
10 |
11 |