├── README.md └── webdriver_java ├── pom.xml └── src ├── main └── java │ ├── pages │ ├── AlertsPage.java │ ├── ContextMenuPage.java │ ├── DropdownPage.java │ ├── DynamicLoadingExample1Page.java │ ├── DynamicLoadingExample2Page.java │ ├── DynamicLoadingPage.java │ ├── EmailSentPage.java │ ├── FileUploadPage.java │ ├── ForgotPasswordPage.java │ ├── FramesPage.java │ ├── HomePage.java │ ├── HorizontalSliderPage.java │ ├── HoversPage.java │ ├── InfiniteScrollPage.java │ ├── KeyPressesPage.java │ ├── LargeAndDeepDomPage.java │ ├── LoginPage.java │ ├── MultipleWindowsPage.java │ ├── NestedFramesPage.java │ ├── SecureAreaPage.java │ └── WysiwygEditorPage.java │ └── utils │ ├── CookieManager.java │ ├── EventReporter.java │ └── WindowManager.java └── test └── java ├── alerts ├── AlertTests.java └── FileUploadTests.java ├── base └── BaseTests.java ├── dropdown └── DropdownTests.java ├── exercises ├── chapter10 │ └── javascript │ │ └── JavaScriptTests.java ├── chapter11 │ └── windows │ │ └── WindowTests.java ├── chapter14 │ └── cookies │ │ └── CookiesTests.java ├── chapter3 │ └── menu │ │ └── MenuCount.java ├── chapter4 │ └── passwords │ │ └── ForgotPasswordTests.java ├── chapter6 │ └── slider │ │ └── SliderTests.java ├── chapter7 │ └── contextmenu │ │ └── ContextMenuTests.java ├── chapter8 │ └── frames │ │ └── FrameTests.java └── chapter9 │ └── wait │ └── WaitTests.java ├── frames └── FrameTests.java ├── hover └── HoverTests.java ├── javascript └── JavaScriptTests.java ├── keys └── KeysTests.java ├── login └── LoginTests.java ├── navigation └── NavigationTests.java └── wait └── WaitTests.java /README.md: -------------------------------------------------------------------------------- 1 | # Free Selenium Webdriver Tutorial 2 | Source code for my [free Selenium WebDriver for Java tutorial](https://testautomationu.applitools.com/selenium-webdriver-tutorial-java/) on Test Automation University. This course covers beginner to advanced topics in Selenium WebDriver. 3 | 4 | -------------------------------------------------------------------------------- /webdriver_java/pom.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | 4.0.0 6 | 7 | testautomationu 8 | webdriver_java 9 | 1.0-SNAPSHOT 10 | 11 | 12 | 1.12 13 | 1.12 14 | 15 | 16 | 17 | 18 | org.seleniumhq.selenium 19 | selenium-chrome-driver 20 | 3.141.59 21 | 22 | 23 | 24 | org.seleniumhq.selenium 25 | selenium-support 26 | 3.141.59 27 | 28 | 29 | 30 | 31 | org.testng 32 | testng 33 | 6.14.3 34 | test 35 | 36 | 37 | 38 | 39 | -------------------------------------------------------------------------------- /webdriver_java/src/main/java/pages/AlertsPage.java: -------------------------------------------------------------------------------- 1 | package pages; 2 | 3 | import org.openqa.selenium.By; 4 | import org.openqa.selenium.WebDriver; 5 | 6 | public class AlertsPage { 7 | 8 | private WebDriver driver; 9 | private By triggerAlertButton = By.xpath(".//button[text()='Click for JS Alert']"); 10 | private By triggerConfirmButton = By.xpath(".//button[text()='Click for JS Confirm']"); 11 | private By triggerPromptButton = By.xpath(".//button[text()='Click for JS Prompt']"); 12 | 13 | private By results = By.id("result"); 14 | 15 | public AlertsPage(WebDriver driver){ 16 | this.driver = driver; 17 | } 18 | 19 | public void triggerAlert(){ 20 | driver.findElement(triggerAlertButton).click(); 21 | } 22 | 23 | public void triggerConfirm(){ 24 | driver.findElement(triggerConfirmButton).click(); 25 | } 26 | 27 | public void triggerPrompt(){ 28 | driver.findElement(triggerPromptButton).click(); 29 | } 30 | 31 | public void alert_clickToAccept(){ 32 | driver.switchTo().alert().accept(); 33 | } 34 | 35 | public void alert_clickToDismiss(){ 36 | driver.switchTo().alert().dismiss(); 37 | } 38 | 39 | public String alert_getText(){ 40 | return driver.switchTo().alert().getText(); 41 | } 42 | 43 | public void alert_setInput(String text){ 44 | driver.switchTo().alert().sendKeys(text); 45 | } 46 | 47 | public String getResult(){ 48 | return driver.findElement(results).getText(); 49 | } 50 | } 51 | -------------------------------------------------------------------------------- /webdriver_java/src/main/java/pages/ContextMenuPage.java: -------------------------------------------------------------------------------- 1 | package pages; 2 | 3 | import org.openqa.selenium.By; 4 | import org.openqa.selenium.WebDriver; 5 | import org.openqa.selenium.interactions.Actions; 6 | 7 | public class ContextMenuPage { 8 | 9 | private WebDriver driver; 10 | private By box = By.id("hot-spot"); 11 | 12 | public ContextMenuPage(WebDriver driver){ 13 | this.driver = driver; 14 | } 15 | 16 | public void rightClickInBox(){ 17 | Actions actions = new Actions(driver); 18 | actions.contextClick(driver.findElement(box)).perform(); 19 | } 20 | 21 | public String getPopUpText(){ 22 | return driver.switchTo().alert().getText(); 23 | } 24 | 25 | public void acceptPopUp(){ 26 | driver.switchTo().alert().accept(); 27 | } 28 | } 29 | -------------------------------------------------------------------------------- /webdriver_java/src/main/java/pages/DropdownPage.java: -------------------------------------------------------------------------------- 1 | package pages; 2 | 3 | import org.openqa.selenium.By; 4 | import org.openqa.selenium.JavascriptExecutor; 5 | import org.openqa.selenium.WebDriver; 6 | import org.openqa.selenium.WebElement; 7 | import org.openqa.selenium.support.ui.Select; 8 | 9 | import java.util.List; 10 | import java.util.stream.Collectors; 11 | 12 | public class DropdownPage { 13 | 14 | private WebDriver driver; 15 | private By dropdown = By.id("dropdown"); 16 | 17 | public DropdownPage(WebDriver driver){ 18 | this.driver = driver; 19 | } 20 | 21 | public void selectFromDropDown(String option){ 22 | findDropDownElement().selectByVisibleText(option); 23 | } 24 | 25 | public List getSelectedOptions(){ 26 | List selectedElements = findDropDownElement().getAllSelectedOptions(); 27 | return selectedElements.stream().map(e->e.getText()).collect(Collectors.toList()); 28 | } 29 | 30 | public void addMultipleAttribute(){ 31 | String script = "arguments[0].setAttribute('multiple','')"; 32 | ((JavascriptExecutor)driver).executeScript(script, findDropDownElement()); 33 | } 34 | 35 | private Select findDropDownElement(){ 36 | return new Select(driver.findElement(dropdown)); 37 | } 38 | } 39 | -------------------------------------------------------------------------------- /webdriver_java/src/main/java/pages/DynamicLoadingExample1Page.java: -------------------------------------------------------------------------------- 1 | package pages; 2 | 3 | import org.openqa.selenium.By; 4 | import org.openqa.selenium.NoSuchElementException; 5 | import org.openqa.selenium.WebDriver; 6 | import org.openqa.selenium.support.ui.ExpectedConditions; 7 | import org.openqa.selenium.support.ui.FluentWait; 8 | import org.openqa.selenium.support.ui.WebDriverWait; 9 | 10 | import java.time.Duration; 11 | 12 | public class DynamicLoadingExample1Page { 13 | 14 | private WebDriver driver; 15 | private By startButton = By.cssSelector("#start button"); 16 | private By loadingIndicator = By.id("loading"); 17 | private By loadedText = By.id("finish"); 18 | 19 | public DynamicLoadingExample1Page(WebDriver driver){ 20 | this.driver = driver; 21 | } 22 | 23 | public void clickStart(){ 24 | driver.findElement(startButton).click(); 25 | WebDriverWait wait = new WebDriverWait(driver, 5); 26 | wait.until(ExpectedConditions.invisibilityOf( 27 | driver.findElement(loadingIndicator))); 28 | 29 | /* FLUENT WAIT */ 30 | // FluentWait wait = new FluentWait(driver) 31 | // .withTimeout(Duration.ofSeconds(5)) 32 | // .pollingEvery(Duration.ofSeconds(1)) 33 | // .ignoring(NoSuchElementException.class); 34 | // wait.until(ExpectedConditions.invisibilityOf( 35 | // driver.findElement(loadingIndicator))); 36 | 37 | } 38 | 39 | public String getLoadedText(){ 40 | return driver.findElement(loadedText).getText(); 41 | } 42 | } 43 | -------------------------------------------------------------------------------- /webdriver_java/src/main/java/pages/DynamicLoadingExample2Page.java: -------------------------------------------------------------------------------- 1 | package pages; 2 | 3 | import org.openqa.selenium.By; 4 | import org.openqa.selenium.WebDriver; 5 | import org.openqa.selenium.support.ui.ExpectedConditions; 6 | import org.openqa.selenium.support.ui.WebDriverWait; 7 | 8 | public class DynamicLoadingExample2Page { 9 | 10 | private WebDriver driver; 11 | private By startButton = By.cssSelector("#start button"); 12 | private By loadedText = By.id("finish"); 13 | 14 | public DynamicLoadingExample2Page(WebDriver driver){ 15 | this.driver = driver; 16 | } 17 | 18 | public void clickStart() { 19 | driver.findElement(startButton).click(); 20 | WebDriverWait wait = new WebDriverWait(driver, 5); 21 | wait.until(ExpectedConditions.presenceOfElementLocated(loadedText)); 22 | } 23 | 24 | public boolean isStartButtonDisplayed(){ 25 | return driver.findElement(startButton).isDisplayed(); 26 | } 27 | 28 | public String getLoadedText(){ 29 | return driver.findElement(loadedText).getText(); 30 | } 31 | } 32 | -------------------------------------------------------------------------------- /webdriver_java/src/main/java/pages/DynamicLoadingPage.java: -------------------------------------------------------------------------------- 1 | package pages; 2 | 3 | import org.openqa.selenium.By; 4 | import org.openqa.selenium.Keys; 5 | import org.openqa.selenium.WebDriver; 6 | import org.openqa.selenium.interactions.Actions; 7 | 8 | public class DynamicLoadingPage { 9 | 10 | private WebDriver driver; 11 | private String linkXpath_Format = ".//a[contains(text(), '%s')]"; 12 | private By link_Example1 = By.xpath(String.format(linkXpath_Format, "Example 1")); 13 | private By link_Example2 = By.xpath(String.format(linkXpath_Format, "Example 2")); 14 | 15 | public DynamicLoadingPage(WebDriver driver){ 16 | this.driver = driver; 17 | } 18 | 19 | public DynamicLoadingExample1Page clickExample1(){ 20 | driver.findElement(link_Example1).click(); 21 | return new DynamicLoadingExample1Page(driver); 22 | } 23 | 24 | public DynamicLoadingExample2Page clickExample2(){ 25 | driver.findElement(link_Example2).click(); 26 | return new DynamicLoadingExample2Page(driver); 27 | } 28 | 29 | public DynamicLoadingExample2Page rightClickOnExample2Link(){ 30 | driver.findElement(link_Example2).sendKeys(Keys.CONTROL, Keys.RETURN); 31 | return new DynamicLoadingExample2Page(driver); 32 | } 33 | } 34 | -------------------------------------------------------------------------------- /webdriver_java/src/main/java/pages/EmailSentPage.java: -------------------------------------------------------------------------------- 1 | package pages; 2 | 3 | import org.openqa.selenium.By; 4 | import org.openqa.selenium.WebDriver; 5 | 6 | public class EmailSentPage { 7 | 8 | private WebDriver driver; 9 | private By contentArea = By.id("content"); 10 | 11 | public EmailSentPage(WebDriver driver){ 12 | this.driver = driver; 13 | } 14 | 15 | public String getMessage(){ 16 | return driver.findElement(contentArea).getText(); 17 | } 18 | } -------------------------------------------------------------------------------- /webdriver_java/src/main/java/pages/FileUploadPage.java: -------------------------------------------------------------------------------- 1 | package pages; 2 | 3 | import org.openqa.selenium.By; 4 | import org.openqa.selenium.WebDriver; 5 | 6 | public class FileUploadPage { 7 | 8 | private WebDriver driver; 9 | private By inputField = By.id("file-upload"); 10 | private By uploadButton = By.id("file-submit"); 11 | private By uploadedFiles = By.id("uploaded-files"); 12 | 13 | public FileUploadPage(WebDriver driver){ 14 | this.driver = driver; 15 | } 16 | 17 | public void clickUploadButton(){ 18 | driver.findElement(uploadButton).click(); 19 | } 20 | 21 | /** 22 | * Provides path of file to the form then clicks Upload button 23 | * @param absolutePathOfFile The complete path of the file to upload 24 | */ 25 | public void uploadFile(String absolutePathOfFile){ 26 | driver.findElement(inputField).sendKeys(absolutePathOfFile); 27 | clickUploadButton(); 28 | } 29 | 30 | public String getUploadedFiles(){ 31 | return driver.findElement(uploadedFiles).getText(); 32 | } 33 | 34 | } 35 | -------------------------------------------------------------------------------- /webdriver_java/src/main/java/pages/ForgotPasswordPage.java: -------------------------------------------------------------------------------- 1 | package pages; 2 | 3 | import org.openqa.selenium.By; 4 | import org.openqa.selenium.WebDriver; 5 | 6 | public class ForgotPasswordPage { 7 | 8 | private WebDriver driver; 9 | private By emailField = By.id("email"); 10 | private By retrievePasswordButton = By.id("form_submit"); 11 | 12 | public ForgotPasswordPage(WebDriver driver){ 13 | this.driver = driver; 14 | } 15 | 16 | public void enterEmail(String email){ 17 | driver.findElement(emailField).sendKeys(email); 18 | } 19 | 20 | public EmailSentPage clickRetrievePassword(){ 21 | driver.findElement(retrievePasswordButton).click(); 22 | return new EmailSentPage(driver); 23 | } 24 | 25 | public EmailSentPage retrievePassword(String email){ 26 | enterEmail(email); 27 | return clickRetrievePassword(); 28 | } 29 | } -------------------------------------------------------------------------------- /webdriver_java/src/main/java/pages/FramesPage.java: -------------------------------------------------------------------------------- 1 | package pages; 2 | 3 | import org.openqa.selenium.By; 4 | import org.openqa.selenium.WebDriver; 5 | 6 | 7 | public class FramesPage { 8 | 9 | private WebDriver driver; 10 | 11 | public FramesPage(WebDriver driver){ 12 | this.driver = driver; 13 | } 14 | 15 | public NestedFramesPage clickNestedFrames(){ 16 | driver.findElement(By.linkText("Nested Frames")).click(); 17 | return new NestedFramesPage(driver); 18 | } 19 | } -------------------------------------------------------------------------------- /webdriver_java/src/main/java/pages/HomePage.java: -------------------------------------------------------------------------------- 1 | package pages; 2 | 3 | import org.openqa.selenium.By; 4 | import org.openqa.selenium.WebDriver; 5 | 6 | public class HomePage { 7 | 8 | private WebDriver driver; 9 | 10 | public HomePage(WebDriver driver){ 11 | this.driver = driver; 12 | } 13 | 14 | public LoginPage clickFormAuthentication(){ 15 | clickLink("Form Authentication"); 16 | return new LoginPage(driver); 17 | } 18 | 19 | public DropdownPage clickDropDown(){ 20 | clickLink("Dropdown"); 21 | return new DropdownPage(driver); 22 | } 23 | 24 | public HoversPage clickHovers(){ 25 | clickLink("Hovers"); 26 | return new HoversPage(driver); 27 | } 28 | 29 | public KeyPressesPage clickKeyPresses(){ 30 | clickLink("Key Presses"); 31 | return new KeyPressesPage(driver); 32 | } 33 | 34 | public AlertsPage clickJavaScriptAlerts(){ 35 | clickLink("JavaScript Alerts"); 36 | return new AlertsPage(driver); 37 | } 38 | 39 | public FileUploadPage clickFileUpload(){ 40 | clickLink("File Upload"); 41 | return new FileUploadPage(driver); 42 | } 43 | 44 | public WysiwygEditorPage clickWysiwygEditor(){ 45 | clickLink("WYSIWYG Editor"); 46 | return new WysiwygEditorPage(driver); 47 | } 48 | 49 | public LargeAndDeepDomPage clickLargeAndDeepDom(){ 50 | clickLink("Large & Deep DOM"); 51 | return new LargeAndDeepDomPage(driver); 52 | } 53 | 54 | public InfiniteScrollPage clickInfiniteScroll(){ 55 | clickLink("Infinite Scroll"); 56 | return new InfiniteScrollPage(driver); 57 | } 58 | 59 | public DynamicLoadingPage clickDynamicLoading(){ 60 | clickLink("Dynamic Loading"); 61 | return new DynamicLoadingPage(driver); 62 | } 63 | 64 | public MultipleWindowsPage clickMultipleWindows(){ 65 | clickLink("Multiple Windows"); 66 | return new MultipleWindowsPage(driver); 67 | } 68 | 69 | private void clickLink(String linkText){ 70 | driver.findElement(By.linkText(linkText)).click(); 71 | } 72 | 73 | /*===================================== 74 | METHODS FOR INDIVIDUAL EXERCISES 75 | ======================================*/ 76 | 77 | public ForgotPasswordPage clickForgotPassword(){ 78 | clickLink("Forgot Password"); 79 | return new ForgotPasswordPage(driver); 80 | } 81 | 82 | public HorizontalSliderPage clickHorizonalSlider(){ 83 | clickLink("Horizontal Slider"); 84 | return new HorizontalSliderPage(driver); 85 | } 86 | 87 | public ContextMenuPage clickContextMenu(){ 88 | clickLink("Context Menu"); 89 | return new ContextMenuPage(driver); 90 | } 91 | 92 | public FramesPage clickFramesPage(){ 93 | clickLink("Frames"); 94 | return new FramesPage(driver); 95 | } 96 | 97 | 98 | 99 | 100 | } -------------------------------------------------------------------------------- /webdriver_java/src/main/java/pages/HorizontalSliderPage.java: -------------------------------------------------------------------------------- 1 | package pages; 2 | 3 | import org.openqa.selenium.By; 4 | import org.openqa.selenium.Keys; 5 | import org.openqa.selenium.WebDriver; 6 | 7 | public class HorizontalSliderPage { 8 | 9 | private WebDriver driver; 10 | private By sliderValue = By.id("range"); 11 | private By slider = By.cssSelector(".sliderContainer input"); 12 | 13 | public HorizontalSliderPage(WebDriver driver){ 14 | this.driver = driver; 15 | } 16 | 17 | public void setSliderValue(String value){ 18 | while(!getSliderValue().equals(value)){ 19 | driver.findElement(slider).sendKeys(Keys.ARROW_RIGHT); 20 | } 21 | } 22 | 23 | public String getSliderValue(){ 24 | return driver.findElement(sliderValue).getText(); 25 | } 26 | } -------------------------------------------------------------------------------- /webdriver_java/src/main/java/pages/HoversPage.java: -------------------------------------------------------------------------------- 1 | package pages; 2 | 3 | import org.openqa.selenium.By; 4 | import org.openqa.selenium.WebDriver; 5 | import org.openqa.selenium.WebElement; 6 | import org.openqa.selenium.interactions.Actions; 7 | 8 | public class HoversPage { 9 | private WebDriver driver; 10 | 11 | private By figureBox = By.className("figure"); 12 | private By boxCaption = By.className("figcaption"); 13 | 14 | public HoversPage(WebDriver driver){ 15 | this.driver = driver; 16 | } 17 | 18 | /** 19 | * @param index starts at 1 20 | */ 21 | public FigureCaption hoverOverFigure(int index){ 22 | WebElement figure = driver.findElements(figureBox).get(index - 1); 23 | 24 | Actions actions = new Actions(driver); 25 | actions.moveToElement(figure).perform(); 26 | 27 | return new FigureCaption(figure.findElement(boxCaption)); 28 | } 29 | 30 | public class FigureCaption{ 31 | 32 | private WebElement caption; 33 | private By header = By.tagName("h5"); 34 | private By link = By.tagName("a"); 35 | 36 | public FigureCaption(WebElement caption){ 37 | this.caption = caption; 38 | } 39 | 40 | public boolean isCaptionDisplayed(){ 41 | return caption.isDisplayed(); 42 | } 43 | 44 | public String getTitle(){ 45 | return caption.findElement(header).getText(); 46 | } 47 | 48 | public String getLink(){ 49 | return caption.findElement(link).getAttribute("href"); 50 | } 51 | 52 | public String getLinkText(){ 53 | return caption.findElement(link).getText(); 54 | } 55 | } 56 | } 57 | -------------------------------------------------------------------------------- /webdriver_java/src/main/java/pages/InfiniteScrollPage.java: -------------------------------------------------------------------------------- 1 | package pages; 2 | 3 | import org.openqa.selenium.By; 4 | import org.openqa.selenium.JavascriptExecutor; 5 | import org.openqa.selenium.WebDriver; 6 | 7 | public class InfiniteScrollPage { 8 | 9 | private WebDriver driver; 10 | By textBlocks = By.className("jscroll-added"); 11 | 12 | public InfiniteScrollPage(WebDriver driver){ 13 | this.driver = driver; 14 | } 15 | 16 | /** 17 | * Scrolls until paragraph with index specified is in view 18 | * @param index 1-based 19 | */ 20 | public void scrollToParagraph(int index){ 21 | String script = "window.scrollTo(0, document.body.scrollHeight)"; 22 | var jsExecutor = (JavascriptExecutor)driver; 23 | 24 | while(getNumberOfParagraphsPresent() < index){ 25 | jsExecutor.executeScript(script); 26 | } 27 | } 28 | 29 | private int getNumberOfParagraphsPresent(){ 30 | return driver.findElements(textBlocks).size(); 31 | } 32 | } 33 | -------------------------------------------------------------------------------- /webdriver_java/src/main/java/pages/KeyPressesPage.java: -------------------------------------------------------------------------------- 1 | package pages; 2 | 3 | import org.openqa.selenium.By; 4 | import org.openqa.selenium.Keys; 5 | import org.openqa.selenium.WebDriver; 6 | 7 | public class KeyPressesPage { 8 | 9 | private WebDriver driver; 10 | private By inputField = By.id("target"); 11 | private By resultText = By.id("result"); 12 | 13 | public KeyPressesPage(WebDriver driver){ 14 | this.driver = driver; 15 | } 16 | 17 | public void enterText(String text){ 18 | driver.findElement(inputField).sendKeys(text); 19 | } 20 | 21 | public void enterPi(){ 22 | enterText(Keys.chord(Keys.ALT, "p") + "=3.14"); 23 | } 24 | 25 | public String getResult(){ 26 | return driver.findElement(resultText).getText(); 27 | } 28 | } 29 | -------------------------------------------------------------------------------- /webdriver_java/src/main/java/pages/LargeAndDeepDomPage.java: -------------------------------------------------------------------------------- 1 | package pages; 2 | 3 | import org.openqa.selenium.By; 4 | import org.openqa.selenium.JavascriptExecutor; 5 | import org.openqa.selenium.WebDriver; 6 | import org.openqa.selenium.WebElement; 7 | 8 | public class LargeAndDeepDomPage { 9 | 10 | private WebDriver driver; 11 | private By table = By.id("large-table"); 12 | 13 | public LargeAndDeepDomPage(WebDriver driver){ 14 | this.driver = driver; 15 | } 16 | 17 | public void scrollToTable(){ 18 | WebElement tableElement = driver.findElement(table); 19 | String script = "arguments[0].scrollIntoView();"; 20 | ((JavascriptExecutor)driver).executeScript(script, tableElement); 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /webdriver_java/src/main/java/pages/LoginPage.java: -------------------------------------------------------------------------------- 1 | package pages; 2 | 3 | import org.openqa.selenium.By; 4 | import org.openqa.selenium.WebDriver; 5 | 6 | public class LoginPage { 7 | 8 | private WebDriver driver; 9 | private By usernameField = By.id("username"); 10 | private By passwordField = By.id("password"); 11 | private By loginButton = By.cssSelector("#login button"); 12 | 13 | public LoginPage(WebDriver driver){ 14 | this.driver = driver; 15 | } 16 | 17 | public void setUsername(String username){ 18 | driver.findElement(usernameField).sendKeys(username); 19 | } 20 | 21 | public void setPassword(String password){ 22 | driver.findElement(passwordField).sendKeys(password); 23 | } 24 | 25 | public SecureAreaPage clickLoginButton(){ 26 | driver.findElement(loginButton).click(); 27 | return new SecureAreaPage(driver); 28 | } 29 | } -------------------------------------------------------------------------------- /webdriver_java/src/main/java/pages/MultipleWindowsPage.java: -------------------------------------------------------------------------------- 1 | package pages; 2 | 3 | import org.openqa.selenium.By; 4 | import org.openqa.selenium.WebDriver; 5 | 6 | public class MultipleWindowsPage { 7 | 8 | private WebDriver driver; 9 | private By clickHereLink = By.linkText("Click Here"); 10 | 11 | public MultipleWindowsPage(WebDriver driver){ 12 | this.driver = driver; 13 | } 14 | 15 | public void clickHere(){ 16 | driver.findElement(clickHereLink).click(); 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /webdriver_java/src/main/java/pages/NestedFramesPage.java: -------------------------------------------------------------------------------- 1 | package pages; 2 | 3 | import org.openqa.selenium.By; 4 | import org.openqa.selenium.WebDriver; 5 | 6 | public class NestedFramesPage { 7 | 8 | private WebDriver driver; 9 | private String topFrame = "frame-top"; 10 | private String leftFrame = "frame-left"; 11 | private String bottomFrame = "frame-bottom"; 12 | private By body = By.tagName("body"); 13 | 14 | public NestedFramesPage(WebDriver driver){ 15 | this.driver = driver; 16 | } 17 | 18 | public String getLeftFrameText(){ 19 | driver.switchTo().frame(topFrame); 20 | driver.switchTo().frame(leftFrame); 21 | String text = getFrameText(); 22 | driver.switchTo().parentFrame(); //exit left to top 23 | driver.switchTo().parentFrame(); //exit top to main 24 | return text; 25 | } 26 | 27 | public String getBottomFrameText(){ 28 | driver.switchTo().frame(bottomFrame); 29 | String text = getFrameText(); 30 | driver.switchTo().parentFrame(); //exit top to main 31 | return text; 32 | } 33 | 34 | private String getFrameText(){ 35 | return driver.findElement(body).getText(); 36 | } 37 | } -------------------------------------------------------------------------------- /webdriver_java/src/main/java/pages/SecureAreaPage.java: -------------------------------------------------------------------------------- 1 | package pages; 2 | 3 | import org.openqa.selenium.By; 4 | import org.openqa.selenium.WebDriver; 5 | 6 | public class SecureAreaPage { 7 | 8 | private WebDriver driver; 9 | private By statusAlert = By.id("flash"); 10 | 11 | public SecureAreaPage(WebDriver driver){ 12 | this.driver = driver; 13 | } 14 | 15 | public String getAlertText(){ 16 | return driver.findElement(statusAlert).getText(); 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /webdriver_java/src/main/java/pages/WysiwygEditorPage.java: -------------------------------------------------------------------------------- 1 | package pages; 2 | 3 | import org.openqa.selenium.By; 4 | import org.openqa.selenium.WebDriver; 5 | 6 | public class WysiwygEditorPage { 7 | 8 | private WebDriver driver; 9 | private String editorIframeId = "mce_0_ifr"; 10 | private By textArea = By.id("tinymce"); 11 | private By decreaseIndentButton = By.cssSelector("button[title='Increase indent']"); 12 | 13 | public WysiwygEditorPage(WebDriver driver){ 14 | this.driver = driver; 15 | } 16 | 17 | public void clearTextArea(){ 18 | switchToEditArea(); 19 | driver.findElement(textArea).clear(); 20 | switchToMainArea(); 21 | } 22 | 23 | public void setTextArea(String text){ 24 | switchToEditArea(); 25 | driver.findElement(textArea).sendKeys(text); 26 | switchToMainArea(); 27 | } 28 | 29 | public String getTextFromEditor(){ 30 | switchToEditArea(); 31 | String text = driver.findElement(textArea).getText(); 32 | switchToMainArea(); 33 | return text; 34 | } 35 | 36 | public void decreaseIndention(){ 37 | driver.findElement(decreaseIndentButton).click(); 38 | } 39 | 40 | private void switchToEditArea(){ 41 | driver.switchTo().frame(editorIframeId); 42 | } 43 | 44 | private void switchToMainArea(){ 45 | driver.switchTo().parentFrame(); 46 | } 47 | } 48 | -------------------------------------------------------------------------------- /webdriver_java/src/main/java/utils/CookieManager.java: -------------------------------------------------------------------------------- 1 | package utils; 2 | 3 | import org.openqa.selenium.Cookie; 4 | import org.openqa.selenium.WebDriver; 5 | 6 | public class CookieManager { 7 | 8 | private WebDriver driver; 9 | 10 | public CookieManager(WebDriver driver){ 11 | this.driver = driver; 12 | } 13 | 14 | public void addCookie(Cookie cookie){ 15 | driver.manage().addCookie(cookie); 16 | } 17 | 18 | public void deleteCookie(Cookie cookie){ 19 | driver.manage().deleteCookie(cookie); 20 | } 21 | 22 | public boolean isCookiePresent(Cookie cookie){ 23 | return driver.manage().getCookieNamed(cookie.getName()) != null; 24 | } 25 | 26 | public Cookie buildCookie(String name, String value){ 27 | Cookie cookie = new Cookie.Builder(name, value) 28 | .domain("the-internet.herokuapp.com") 29 | .build(); 30 | return cookie; 31 | } 32 | } 33 | -------------------------------------------------------------------------------- /webdriver_java/src/main/java/utils/EventReporter.java: -------------------------------------------------------------------------------- 1 | package utils; 2 | 3 | import org.openqa.selenium.By; 4 | import org.openqa.selenium.OutputType; 5 | import org.openqa.selenium.WebDriver; 6 | import org.openqa.selenium.WebElement; 7 | import org.openqa.selenium.support.events.WebDriverEventListener; 8 | 9 | public class EventReporter implements WebDriverEventListener { 10 | @Override 11 | public void beforeAlertAccept(WebDriver webDriver) { 12 | 13 | } 14 | 15 | @Override 16 | public void afterAlertAccept(WebDriver webDriver) { 17 | 18 | } 19 | 20 | @Override 21 | public void afterAlertDismiss(WebDriver webDriver) { 22 | 23 | } 24 | 25 | @Override 26 | public void beforeAlertDismiss(WebDriver webDriver) { 27 | 28 | } 29 | 30 | @Override 31 | public void beforeNavigateTo(String s, WebDriver webDriver) { 32 | 33 | } 34 | 35 | @Override 36 | public void afterNavigateTo(String s, WebDriver webDriver) { 37 | 38 | } 39 | 40 | @Override 41 | public void beforeNavigateBack(WebDriver webDriver) { 42 | 43 | } 44 | 45 | @Override 46 | public void afterNavigateBack(WebDriver webDriver) { 47 | 48 | } 49 | 50 | @Override 51 | public void beforeNavigateForward(WebDriver webDriver) { 52 | 53 | } 54 | 55 | @Override 56 | public void afterNavigateForward(WebDriver webDriver) { 57 | 58 | } 59 | 60 | @Override 61 | public void beforeNavigateRefresh(WebDriver webDriver) { 62 | 63 | } 64 | 65 | @Override 66 | public void afterNavigateRefresh(WebDriver webDriver) { 67 | 68 | } 69 | 70 | @Override 71 | public void beforeFindBy(By by, WebElement webElement, WebDriver webDriver) { 72 | 73 | } 74 | 75 | @Override 76 | public void afterFindBy(By by, WebElement webElement, WebDriver webDriver) { 77 | 78 | } 79 | 80 | @Override 81 | public void beforeClickOn(WebElement webElement, WebDriver webDriver) { 82 | System.out.println("Clicking on " + webElement.getText()); 83 | } 84 | 85 | @Override 86 | public void afterClickOn(WebElement webElement, WebDriver webDriver) { 87 | 88 | } 89 | 90 | @Override 91 | public void beforeChangeValueOf(WebElement webElement, WebDriver webDriver, CharSequence[] charSequences) { 92 | 93 | } 94 | 95 | @Override 96 | public void afterChangeValueOf(WebElement webElement, WebDriver webDriver, CharSequence[] charSequences) { 97 | 98 | } 99 | 100 | @Override 101 | public void beforeScript(String s, WebDriver webDriver) { 102 | 103 | } 104 | 105 | @Override 106 | public void afterScript(String s, WebDriver webDriver) { 107 | 108 | } 109 | 110 | @Override 111 | public void beforeSwitchToWindow(String s, WebDriver webDriver) { 112 | 113 | } 114 | 115 | @Override 116 | public void afterSwitchToWindow(String s, WebDriver webDriver) { 117 | 118 | } 119 | 120 | @Override 121 | public void onException(Throwable throwable, WebDriver webDriver) { 122 | 123 | } 124 | 125 | @Override 126 | public void beforeGetScreenshotAs(OutputType outputType) { 127 | 128 | } 129 | 130 | @Override 131 | public void afterGetScreenshotAs(OutputType outputType, X x) { 132 | 133 | } 134 | 135 | @Override 136 | public void beforeGetText(WebElement webElement, WebDriver webDriver) { 137 | 138 | } 139 | 140 | @Override 141 | public void afterGetText(WebElement webElement, WebDriver webDriver, String s) { 142 | 143 | } 144 | } 145 | -------------------------------------------------------------------------------- /webdriver_java/src/main/java/utils/WindowManager.java: -------------------------------------------------------------------------------- 1 | package utils; 2 | 3 | import org.openqa.selenium.WebDriver; 4 | 5 | public class WindowManager { 6 | 7 | private WebDriver driver; 8 | private WebDriver.Navigation navigate; 9 | 10 | public WindowManager(WebDriver driver){ 11 | this.driver = driver; 12 | navigate = driver.navigate(); 13 | } 14 | 15 | public void goBack(){ 16 | navigate.back(); 17 | } 18 | 19 | public void goForward(){ 20 | navigate.forward(); 21 | } 22 | 23 | public void refreshPage(){ 24 | navigate.refresh(); 25 | } 26 | 27 | public void goTo(String url){ 28 | navigate.to(url); 29 | } 30 | 31 | public void switchToTab(String tabTitle){ 32 | var windows = driver.getWindowHandles(); 33 | 34 | System.out.println("Number of tabs: " + windows.size()); 35 | 36 | System.out.println("Window handles:"); 37 | windows.forEach(System.out::println); 38 | 39 | for(String window : windows){ 40 | System.out.println("Switching to window: " + window); 41 | driver.switchTo().window(window); 42 | 43 | System.out.println("Current window title: " + driver.getTitle()); 44 | 45 | if(tabTitle.equals(driver.getTitle())){ 46 | break; 47 | } 48 | } 49 | } 50 | public void switchToNewTab(){ 51 | var windows = driver.getWindowHandles(); 52 | windows.forEach(driver.switchTo()::window); 53 | } 54 | } -------------------------------------------------------------------------------- /webdriver_java/src/test/java/alerts/AlertTests.java: -------------------------------------------------------------------------------- 1 | package alerts; 2 | 3 | import base.BaseTests; 4 | import org.testng.annotations.Test; 5 | 6 | import static org.testng.Assert.assertEquals; 7 | 8 | public class AlertTests extends BaseTests { 9 | 10 | @Test 11 | public void testAcceptAlert(){ 12 | var alertsPage = homePage.clickJavaScriptAlerts(); 13 | alertsPage.triggerAlert(); 14 | alertsPage.alert_clickToAccept(); 15 | assertEquals(alertsPage.getResult(), "You successfuly clicked an alert", "Results text incorrect"); 16 | } 17 | 18 | @Test 19 | public void testGetTextFromAlert(){ 20 | var alertsPage = homePage.clickJavaScriptAlerts(); 21 | alertsPage.triggerConfirm(); 22 | String text = alertsPage.alert_getText(); 23 | alertsPage.alert_clickToDismiss(); 24 | assertEquals(text, "I am a JS Confirm", "Alert text incorrect"); 25 | } 26 | 27 | @Test 28 | public void testSetInputInAlert(){ 29 | var alertsPage = homePage.clickJavaScriptAlerts(); 30 | alertsPage.triggerPrompt(); 31 | 32 | String text = "TAU rocks!"; 33 | alertsPage.alert_setInput(text); 34 | alertsPage.alert_clickToAccept(); 35 | assertEquals(alertsPage.getResult(), "You entered: " + text, "Results text incorrect"); 36 | } 37 | } 38 | -------------------------------------------------------------------------------- /webdriver_java/src/test/java/alerts/FileUploadTests.java: -------------------------------------------------------------------------------- 1 | package alerts; 2 | 3 | import base.BaseTests; 4 | import org.testng.annotations.Test; 5 | 6 | import static org.testng.Assert.assertEquals; 7 | 8 | public class FileUploadTests extends BaseTests { 9 | 10 | @Test 11 | public void testFileUpload(){ 12 | var uploadPage = homePage.clickFileUpload(); 13 | uploadPage.uploadFile("/Users/angie/workspace/test_automation_u/webdriver_java/resources/chromedriver"); 14 | assertEquals(uploadPage.getUploadedFiles(), "chromedriver", "Uploaded files incorrect"); 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /webdriver_java/src/test/java/base/BaseTests.java: -------------------------------------------------------------------------------- 1 | package base; 2 | 3 | import com.google.common.io.Files; 4 | import org.openqa.selenium.*; 5 | import org.openqa.selenium.chrome.ChromeDriver; 6 | import org.openqa.selenium.chrome.ChromeOptions; 7 | import org.openqa.selenium.support.events.EventFiringWebDriver; 8 | import org.testng.ITestResult; 9 | import org.testng.annotations.*; 10 | import pages.HomePage; 11 | import utils.CookieManager; 12 | import utils.EventReporter; 13 | import utils.WindowManager; 14 | 15 | import java.io.File; 16 | import java.io.IOException; 17 | 18 | public class BaseTests { 19 | 20 | private EventFiringWebDriver driver; 21 | protected HomePage homePage; 22 | 23 | @BeforeClass 24 | public void setUp(){ 25 | System.setProperty("webdriver.chrome.driver", "resources/chromedriver"); 26 | driver = new EventFiringWebDriver(new ChromeDriver(getChromeOptions())); 27 | driver.register(new EventReporter()); 28 | } 29 | 30 | @BeforeMethod 31 | public void goHome(){ 32 | driver.get("https://the-internet.herokuapp.com/"); 33 | homePage = new HomePage(driver); 34 | } 35 | 36 | @AfterClass 37 | public void tearDown(){ 38 | driver.quit(); 39 | } 40 | 41 | @AfterMethod 42 | public void recordFailure(ITestResult result){ 43 | if(ITestResult.FAILURE == result.getStatus()) 44 | { 45 | var camera = (TakesScreenshot)driver; 46 | File screenshot = camera.getScreenshotAs(OutputType.FILE); 47 | try{ 48 | Files.move(screenshot, new File("resources/screenshots/" + result.getName() + ".png")); 49 | }catch(IOException e){ 50 | e.printStackTrace(); 51 | } 52 | } 53 | } 54 | 55 | public WindowManager getWindowManager(){ 56 | return new WindowManager(driver); 57 | } 58 | 59 | private ChromeOptions getChromeOptions(){ 60 | ChromeOptions options = new ChromeOptions(); 61 | options.addArguments("disable-infobars"); 62 | //options.setHeadless(true); 63 | return options; 64 | } 65 | 66 | public CookieManager getCookieManager(){ 67 | return new CookieManager(driver); 68 | } 69 | } 70 | -------------------------------------------------------------------------------- /webdriver_java/src/test/java/dropdown/DropdownTests.java: -------------------------------------------------------------------------------- 1 | package dropdown; 2 | 3 | import base.BaseTests; 4 | import org.testng.annotations.Test; 5 | 6 | import static org.testng.Assert.assertEquals; 7 | import static org.testng.Assert.assertTrue; 8 | 9 | public class DropdownTests extends BaseTests { 10 | 11 | @Test 12 | public void testSelectOption(){ 13 | var dropDownPage = homePage.clickDropDown(); 14 | 15 | String option = "Option 1"; 16 | dropDownPage.selectFromDropDown(option); 17 | var selectedOptions = dropDownPage.getSelectedOptions(); 18 | assertEquals(selectedOptions.size(), 1, "Incorrect number of selections"); 19 | assertTrue(selectedOptions.contains(option), "Option not selected"); 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /webdriver_java/src/test/java/exercises/chapter10/javascript/JavaScriptTests.java: -------------------------------------------------------------------------------- 1 | package exercises.chapter10.javascript; 2 | 3 | import base.BaseTests; 4 | import org.testng.annotations.Test; 5 | 6 | import java.util.List; 7 | 8 | import static org.testng.Assert.assertEquals; 9 | import static org.testng.Assert.assertTrue; 10 | 11 | public class JavaScriptTests extends BaseTests { 12 | 13 | @Test 14 | public void testAddMultipleAttributeToDropdown() { 15 | 16 | var dropDownPage = homePage.clickDropDown(); 17 | dropDownPage.addMultipleAttribute(); 18 | 19 | var optionsToSelect = List.of("Option 1", "Option 2"); 20 | optionsToSelect.forEach(dropDownPage::selectFromDropDown); 21 | 22 | var selectedOptions = dropDownPage.getSelectedOptions(); 23 | assertTrue(selectedOptions.containsAll(optionsToSelect), "All options were not selected"); 24 | assertEquals(selectedOptions.size(), optionsToSelect.size(), "Number of selected items"); 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /webdriver_java/src/test/java/exercises/chapter11/windows/WindowTests.java: -------------------------------------------------------------------------------- 1 | package exercises.chapter11.windows; 2 | 3 | import base.BaseTests; 4 | import org.testng.annotations.Test; 5 | 6 | import static org.testng.Assert.assertTrue; 7 | 8 | public class WindowTests extends BaseTests { 9 | 10 | @Test 11 | public void testWindowTabs(){ 12 | var buttonPage = homePage.clickDynamicLoading().rightClickOnExample2Link(); 13 | getWindowManager().switchToNewTab(); 14 | assertTrue(buttonPage.isStartButtonDisplayed(), "Start button is not displayed"); 15 | } 16 | } -------------------------------------------------------------------------------- /webdriver_java/src/test/java/exercises/chapter14/cookies/CookiesTests.java: -------------------------------------------------------------------------------- 1 | package exercises.chapter14.cookies; 2 | 3 | import base.BaseTests; 4 | import org.openqa.selenium.Cookie; 5 | import org.testng.annotations.Test; 6 | 7 | import static org.testng.Assert.assertFalse; 8 | 9 | public class CookiesTests extends BaseTests { 10 | 11 | @Test 12 | public void testDeleteCookie(){ 13 | var cookieManager = getCookieManager(); 14 | Cookie cookie = cookieManager.buildCookie("optimizelyBuckets", "%7B%TD"); 15 | cookieManager.deleteCookie(cookie); 16 | assertFalse(cookieManager.isCookiePresent(cookie), "Cookie was not deleted"); 17 | } 18 | } -------------------------------------------------------------------------------- /webdriver_java/src/test/java/exercises/chapter3/menu/MenuCount.java: -------------------------------------------------------------------------------- 1 | package exercises.chapter3.menu; 2 | 3 | import org.openqa.selenium.By; 4 | import org.openqa.selenium.WebDriver; 5 | import org.openqa.selenium.WebElement; 6 | import org.openqa.selenium.chrome.ChromeDriver; 7 | 8 | import java.util.List; 9 | 10 | public class MenuCount { 11 | 12 | private WebDriver driver; 13 | 14 | public void printLinkCount(){ 15 | System.setProperty("webdriver.chrome.driver", "resources/chromedriver"); 16 | driver = new ChromeDriver(); 17 | driver.get("https://the-internet.herokuapp.com/"); 18 | driver.findElement(By.linkText("Shifting Content")).click(); 19 | driver.findElement(By.linkText("Example 1: Menu Element")).click(); 20 | 21 | 22 | List menuItems = driver.findElements(By.tagName("li")); 23 | System.out.println("Number of menu elements: " + menuItems.size()); 24 | 25 | driver.quit(); 26 | } 27 | 28 | public static void main(String args[]){ 29 | MenuCount test = new MenuCount(); 30 | test.printLinkCount(); 31 | } 32 | } 33 | -------------------------------------------------------------------------------- /webdriver_java/src/test/java/exercises/chapter4/passwords/ForgotPasswordTests.java: -------------------------------------------------------------------------------- 1 | package exercises.chapter4.passwords; 2 | 3 | import base.BaseTests; 4 | import org.testng.annotations.Test; 5 | 6 | import static org.testng.Assert.assertEquals; 7 | 8 | public class ForgotPasswordTests extends BaseTests { 9 | 10 | @Test 11 | public void testRetrievePassword(){ 12 | var forgetPasswordPage = homePage.clickForgotPassword(); 13 | var emailSentPage = forgetPasswordPage.retrievePassword("tau@example.com"); 14 | assertEquals(emailSentPage.getMessage(), "Your e-mail's been sent!", "Message is incorrect"); 15 | } 16 | } -------------------------------------------------------------------------------- /webdriver_java/src/test/java/exercises/chapter6/slider/SliderTests.java: -------------------------------------------------------------------------------- 1 | package exercises.chapter6.slider; 2 | 3 | import base.BaseTests; 4 | import org.testng.annotations.Test; 5 | 6 | import static org.testng.Assert.assertEquals; 7 | 8 | public class SliderTests extends BaseTests { 9 | 10 | @Test 11 | public void testSlideToWholeNumber(){ 12 | String value = "4"; 13 | var sliderPage = homePage.clickHorizonalSlider(); 14 | sliderPage.setSliderValue(value); 15 | assertEquals(sliderPage.getSliderValue(), value, "Slider value is incorrect"); 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /webdriver_java/src/test/java/exercises/chapter7/contextmenu/ContextMenuTests.java: -------------------------------------------------------------------------------- 1 | package exercises.chapter7.contextmenu; 2 | 3 | import base.BaseTests; 4 | import org.testng.annotations.Test; 5 | 6 | import static org.testng.Assert.assertEquals; 7 | 8 | public class ContextMenuTests extends BaseTests { 9 | 10 | @Test 11 | public void testRightClick(){ 12 | var menuPage = homePage.clickContextMenu(); 13 | menuPage.rightClickInBox(); 14 | String message = menuPage.getPopUpText(); 15 | menuPage.acceptPopUp(); 16 | assertEquals(message, "You selected a context menu", "Popup message incorrect"); 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /webdriver_java/src/test/java/exercises/chapter8/frames/FrameTests.java: -------------------------------------------------------------------------------- 1 | package exercises.chapter8.frames; 2 | 3 | import base.BaseTests; 4 | import org.testng.annotations.Test; 5 | 6 | import static org.testng.Assert.assertEquals; 7 | 8 | public class FrameTests extends BaseTests { 9 | 10 | @Test 11 | public void testFrameText() { 12 | var nestedFramesPage = homePage.clickFramesPage().clickNestedFrames(); 13 | assertEquals(nestedFramesPage.getLeftFrameText(), "LEFT", "Left frame text incorrect"); 14 | assertEquals(nestedFramesPage.getBottomFrameText(), "BOTTOM", "Bottom frame text incorrect"); 15 | } 16 | } -------------------------------------------------------------------------------- /webdriver_java/src/test/java/exercises/chapter9/wait/WaitTests.java: -------------------------------------------------------------------------------- 1 | package exercises.chapter9.wait; 2 | 3 | import base.BaseTests; 4 | import org.testng.annotations.Test; 5 | 6 | import static org.testng.Assert.assertEquals; 7 | 8 | public class WaitTests extends BaseTests { 9 | 10 | @Test 11 | public void testWaitUntilVisible(){ 12 | var loadingPage = homePage.clickDynamicLoading().clickExample2(); 13 | loadingPage.clickStart(); 14 | assertEquals(loadingPage.getLoadedText(), "Hello World!", "Loaded text incorrect"); 15 | } 16 | } -------------------------------------------------------------------------------- /webdriver_java/src/test/java/frames/FrameTests.java: -------------------------------------------------------------------------------- 1 | package frames; 2 | 3 | import base.BaseTests; 4 | import org.testng.annotations.Test; 5 | 6 | import static org.testng.Assert.assertEquals; 7 | 8 | public class FrameTests extends BaseTests { 9 | 10 | @Test 11 | public void testWysiwyg(){ 12 | var editorPage = homePage.clickWysiwygEditor(); 13 | editorPage.clearTextArea(); 14 | 15 | String text1 = "hello "; 16 | String text2 = "world"; 17 | 18 | editorPage.setTextArea(text1); 19 | editorPage.decreaseIndention(); 20 | editorPage.setTextArea(text2); 21 | 22 | assertEquals(editorPage.getTextFromEditor(), text1+text2, "Text from editor is incorrect"); 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /webdriver_java/src/test/java/hover/HoverTests.java: -------------------------------------------------------------------------------- 1 | package hover; 2 | 3 | import base.BaseTests; 4 | import org.testng.annotations.Test; 5 | 6 | import static org.testng.Assert.*; 7 | 8 | public class HoverTests extends BaseTests { 9 | 10 | @Test 11 | public void testHoverUser1(){ 12 | var hoversPage = homePage.clickHovers(); 13 | var caption = hoversPage.hoverOverFigure(1); 14 | assertTrue(caption.isCaptionDisplayed(), "Caption not displayed"); 15 | assertEquals(caption.getTitle(), "name: user1", "Caption title incorrect"); 16 | assertEquals(caption.getLinkText(), "View profile", "Caption link text incorrect"); 17 | assertTrue(caption.getLink().endsWith("/users/1"), "Link incorrect"); 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /webdriver_java/src/test/java/javascript/JavaScriptTests.java: -------------------------------------------------------------------------------- 1 | package javascript; 2 | 3 | import base.BaseTests; 4 | import org.testng.annotations.Test; 5 | 6 | public class JavaScriptTests extends BaseTests { 7 | 8 | /************************************************************ 9 | NOTE: We did not add assertions to these tests in the video 10 | ************************************************************/ 11 | 12 | @Test 13 | public void testScrollToTable(){ 14 | homePage.clickLargeAndDeepDom().scrollToTable(); 15 | } 16 | 17 | @Test 18 | public void testScrollToFifthParagraph(){ 19 | homePage.clickInfiniteScroll().scrollToParagraph(5); 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /webdriver_java/src/test/java/keys/KeysTests.java: -------------------------------------------------------------------------------- 1 | package keys; 2 | 3 | import base.BaseTests; 4 | import org.openqa.selenium.Keys; 5 | import org.testng.annotations.Test; 6 | 7 | import static org.testng.Assert.assertEquals; 8 | 9 | public class KeysTests extends BaseTests { 10 | 11 | @Test 12 | public void testBackspace(){ 13 | var keyPage = homePage.clickKeyPresses(); 14 | keyPage.enterText("A" + Keys.BACK_SPACE); 15 | assertEquals(keyPage.getResult(), "You entered: BACK_SPACE", "Input result incorrect"); 16 | } 17 | 18 | @Test 19 | public void testPi(){ 20 | var keyPage = homePage.clickKeyPresses(); 21 | keyPage.enterPi(); 22 | /* 23 | NOTE: we didn't finish this test in the video. 24 | We debugged to watch it enter the pi key 25 | */ 26 | } 27 | } 28 | -------------------------------------------------------------------------------- /webdriver_java/src/test/java/login/LoginTests.java: -------------------------------------------------------------------------------- 1 | package login; 2 | 3 | import base.BaseTests; 4 | import org.testng.annotations.Test; 5 | import pages.LoginPage; 6 | import pages.SecureAreaPage; 7 | 8 | import static org.testng.Assert.*; 9 | 10 | public class LoginTests extends BaseTests { 11 | 12 | @Test 13 | public void testSuccessfulLogin(){ 14 | LoginPage loginPage = homePage.clickFormAuthentication(); 15 | loginPage.setUsername("tomsmith"); 16 | loginPage.setPassword("SuperSecretPassword!"); 17 | SecureAreaPage secureAreaPage = loginPage.clickLoginButton(); 18 | assertTrue(secureAreaPage.getAlertText() 19 | .contains("You logged into a secure area!"), 20 | "Alert text is incorrect"); 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /webdriver_java/src/test/java/navigation/NavigationTests.java: -------------------------------------------------------------------------------- 1 | package navigation; 2 | 3 | import base.BaseTests; 4 | import org.testng.annotations.Test; 5 | 6 | public class NavigationTests extends BaseTests { 7 | 8 | /************************************************* 9 | * NOTE: These tests do not assert anything. 10 | * In the video, we used this code to demonstrate 11 | * window management 12 | *************************************************/ 13 | 14 | @Test 15 | public void testNavigator(){ 16 | homePage.clickDynamicLoading().clickExample1(); 17 | getWindowManager().goBack(); 18 | getWindowManager().refreshPage(); 19 | getWindowManager().goForward(); 20 | getWindowManager().goTo("https://google.com"); 21 | } 22 | 23 | @Test 24 | public void testSwitchTab(){ 25 | homePage.clickMultipleWindows().clickHere(); 26 | getWindowManager().switchToTab("New Window"); 27 | } 28 | } -------------------------------------------------------------------------------- /webdriver_java/src/test/java/wait/WaitTests.java: -------------------------------------------------------------------------------- 1 | package wait; 2 | 3 | import base.BaseTests; 4 | import org.testng.annotations.Test; 5 | 6 | import static org.testng.Assert.assertEquals; 7 | 8 | public class WaitTests extends BaseTests { 9 | 10 | @Test 11 | public void testWaitUntilHidden(){ 12 | var loadingPage = homePage.clickDynamicLoading().clickExample1(); 13 | loadingPage.clickStart(); 14 | assertEquals(loadingPage.getLoadedText(), "Hello World!", "Loaded text incorrect"); 15 | } 16 | } --------------------------------------------------------------------------------