Skip to content

Commit

Permalink
appium#242 fix: The test of compatibility with WebDriverEventListener…
Browse files Browse the repository at this point in the history
… & bug fixes
  • Loading branch information
TikhomirovSergey authored and pfoster-youitv committed Jul 29, 2016
1 parent 24c0d66 commit 933cdb9
Show file tree
Hide file tree
Showing 5 changed files with 264 additions and 3 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -43,14 +43,12 @@ private Method findElementInWebDriverEventListener(Method m) {
for (Listener l: listeners) {
if (method.getDeclaringClass().isAssignableFrom(l.getClass())) {
method.invoke(l, args);
return null;
}

Method webDriverEventListenerMethod = findElementInWebDriverEventListener(method);
if (webDriverEventListenerMethod != null
&& WebDriverEventListener.class.isAssignableFrom(l.getClass())) {
webDriverEventListenerMethod.invoke(l, args);
return null;
}
}
return null;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,6 @@
import org.openqa.selenium.security.Credentials;

import java.net.URL;
import java.util.ArrayList;
import java.util.List;

@FixMethodOrder(MethodSorters.NAME_ASCENDING)
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,178 @@
package io.appium.java_client.events;

import static org.hamcrest.core.IsCollectionContaining.hasItems;
import static org.junit.Assert.assertThat;

import io.appium.java_client.MobileBy;
import io.appium.java_client.events.listeners.AppiumListener;
import io.appium.java_client.events.listeners.SingleListeners;
import org.junit.BeforeClass;
import org.junit.FixMethodOrder;
import org.junit.Test;
import org.junit.runners.MethodSorters;
import org.openqa.selenium.By;
import org.openqa.selenium.OutputType;

import java.net.URL;
import java.util.List;

@FixMethodOrder(MethodSorters.NAME_ASCENDING)
public class WebDriverEventListenerCompatibilityTest {

private static StubWebDriver driver;
private static AppiumListener listener;

@BeforeClass public static void beforeClass() throws Exception {
StubWebDriver stubWebDriver = new StubWebDriver();
driver = EventFiringWebDriverFactory.getEventFiringWebDriver(stubWebDriver);
listener = (AppiumListener) SingleListeners.listeners.get(AppiumListener.class);
}

@Test
public void searchContextEventTest() {
driver.findElement(By.id("someId"));
assertThat(listener.messages,
hasItems("WebDriverEventListener: Attempt to find something using By.id: someId. The root element is null",
"WebDriverEventListener: The searching for something using By.id: someId has beed finished. "
+ "The root element was null"));

driver.findElements(By.id("someId2"));

assertThat(listener.messages,
hasItems("WebDriverEventListener: Attempt to find something using By.id: someId. The root element is null",
"WebDriverEventListener: The searching for something using By.id: someId has beed finished. "
+ "The root element was null",
"WebDriverEventListener: Attempt to find something using By.id: someId2. The root element is null",
"WebDriverEventListener: The searching for something using By.id: someId2 has beed finished. "
+ "The root element was null"));

driver.findElement(By.id("someId")).findElement(By.className("someClazz"));

assertThat(listener.messages,
hasItems("WebDriverEventListener: Attempt to find something using By.id: someId. The root element is null",
"WebDriverEventListener: The searching for something using By.id: someId has beed finished. "
+ "The root element was null",
"WebDriverEventListener: Attempt to find something using By.id: someId2. The root element is null",
"WebDriverEventListener: The searching for something using By.id: someId2 has beed finished. "
+ "The root element was null",
"WebDriverEventListener: Attempt to find something using By.className: someClazz. The root element is "
+ "io.appium.java_client.events.StubWebElement",
"WebDriverEventListener: The searching for something using By.className: someClazz has beed finished. "
+ "The root element was "
+ "io.appium.java_client.events.StubWebElement"));

driver.findElements(By.id("someId2")).get(0).findElements(By.className("someClazz2"));
assertThat(listener.messages,
hasItems("WebDriverEventListener: Attempt to find something using By.id: someId. The root element is null",
"WebDriverEventListener: The searching for something using By.id: someId has beed finished. "
+ "The root element was null",
"WebDriverEventListener: Attempt to find something using By.id: someId2. The root element is null",
"WebDriverEventListener: The searching for something using By.id: someId2 has beed finished. "
+ "The root element was null",
"WebDriverEventListener: Attempt to find something using By.className: someClazz. The root element is "
+ "io.appium.java_client.events.StubWebElement",
"WebDriverEventListener: The searching for something using By.className: someClazz has beed finished. "
+ "The root element was "
+ "io.appium.java_client.events.StubWebElement",
"WebDriverEventListener: Attempt to find something using By.className: someClazz2. The root element is "
+ "io.appium.java_client.events.StubWebElement",
"WebDriverEventListener: The searching for something using By.className: someClazz2 has beed finished. "
+ "The root element was "
+ "io.appium.java_client.events.StubWebElement"));
}

@Test
public void searchContextEventTest2() {
List<StubWebElement> els = driver.findElementsByAccessibilityId("SomeAccessibility");
StubWebElement e = driver.findElementByXPath("Some Path");

e.findElementByAccessibilityId("SomeAccessibility")
.findElement(MobileBy.AndroidUIAutomator("Android UI Automator"));
els.get(0).findElementByAccessibilityId("SomeAccessibility")
.findElement(MobileBy.IosUIAutomation("iOS UI Automation"));

assertThat(listener.messages,
hasItems("WebDriverEventListener: Attempt to find something using By.AndroidUIAutomator:"
+ " Android UI Automator. "
+ "The root element is io.appium.java_client.events.StubWebElement",
"WebDriverEventListener: The searching for something using By.AndroidUIAutomator: "
+ "Android UI Automator has "
+ "beed finished. "
+ "The root element was io.appium.java_client.events.StubWebElement",
"WebDriverEventListener: Attempt to find something using By.IosUIAutomation: iOS UI Automation. "
+ "The root element is io.appium.java_client.events.StubWebElement",
"WebDriverEventListener: The searching for something using By.IosUIAutomation: iOS UI Automation "
+ "has beed finished. "
+ "The root element was io.appium.java_client.events.StubWebElement"));
}

@Test
public void searchNavigationEventTest() throws Exception {
driver.get("www.google.com");
driver.navigate().to("www.google2.com");
driver.navigate().to(new URL("https://www.google3.com"));
driver.navigate().forward();
driver.navigate().back();
driver.navigate().refresh();

assertThat(listener.messages,
hasItems("WebDriverEventListener: Attempt to navigate to www.google.com",
"WebDriverEventListener: Navigation to www.google.com was successful",
"WebDriverEventListener: Attempt to navigate to www.google2.com",
"WebDriverEventListener: Navigation to www.google2.com was successful",
"WebDriverEventListener: Attempt to navigate to https://www.google3.com",
"WebDriverEventListener: Navigation to https://www.google3.com was successful",
"WebDriverEventListener: Attempt to navigate forward",
"WebDriverEventListener: Navigation forward was successful",
"WebDriverEventListener: Attempt to navigate back",
"WebDriverEventListener: Navigation back was successful",
"WebDriverEventListener: Attempt to refresh",
"WebDriverEventListener: The refreshing was successful"));
}

@Test
public void elementEventTest() {
StubWebElement e = driver.findElementByXPath("Some Path");
e.click();
e.sendKeys("Test keys");

assertThat(listener.messages,
hasItems("WebDriverEventListener: Attempt to click on the element",
"WebDriverEventListener: Thee element was clicked",
"WebDriverEventListener: Attempt to change value of the element",
"WebDriverEventListener: The value of the element was changed"));
}

@Test
public void javaScriptEventTest() {
driver.executeScript("Some test script");
driver.executeAsyncScript("Some test async script");

assertThat(listener.messages,
hasItems("WebDriverEventListener: Attempt to perform java script: Some test script",
"WebDriverEventListener: Java script Some test script was performed",
"WebDriverEventListener: Attempt to perform java script: Some test async script",
"WebDriverEventListener: Java script Some test async script was performed"));
}

@Test
public void exceptionEventTest() {
try {
driver.getWindowHandle();
} catch (Exception ignored) {
ignored.printStackTrace();
}

try {
driver.findElementByXPath("Some Path").getScreenshotAs(OutputType.BASE64);
} catch (Exception ignored) {
ignored.printStackTrace();
}

assertThat(listener.messages,
hasItems("WebDriverEventListener: The exception was thrown: "
+ new RuntimeException("Test WebDriver exception").toString(),
"WebDriverEventListener: The exception was thrown: "
+ new RuntimeException("Test web element exception").toString()));
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,85 @@
package io.appium.java_client.events.listeners;

import io.appium.java_client.events.api.general.AppiumWebDriverEventListener;
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;

public class AppiumListener extends TestListener implements AppiumWebDriverEventListener {
@Override void add() {
SingleListeners.listeners.put(AppiumListener.class, this);
}

@Override public void beforeNavigateTo(String url, WebDriver driver) {
messages.add("WebDriverEventListener: Attempt to navigate to " + url);
}

@Override public void afterNavigateTo(String url, WebDriver driver) {
messages.add("WebDriverEventListener: Navigation to " + url + " was successful");
}

@Override public void beforeNavigateBack(WebDriver driver) {
messages.add("WebDriverEventListener: Attempt to navigate back");
}

@Override public void afterNavigateBack(WebDriver driver) {
messages.add("WebDriverEventListener: Navigation back was successful");
}

@Override public void beforeNavigateForward(WebDriver driver) {
messages.add("WebDriverEventListener: Attempt to navigate forward");
}

@Override public void afterNavigateForward(WebDriver driver) {
messages.add("WebDriverEventListener: Navigation forward was successful");
}

@Override public void beforeNavigateRefresh(WebDriver driver) {
messages.add("WebDriverEventListener: Attempt to refresh");
}

@Override public void afterNavigateRefresh(WebDriver driver) {
messages.add("WebDriverEventListener: The refreshing was successful");
}

@Override public void beforeFindBy(By by, WebElement element, WebDriver driver) {
messages.add("WebDriverEventListener: Attempt to find something using " + by.toString()
+ ". The root element is "
+ String.valueOf(element));
}

@Override public void afterFindBy(By by, WebElement element, WebDriver driver) {
messages.add("WebDriverEventListener: The searching for something using "
+ by.toString() + " has beed finished. "
+ "The root element was "
+ String.valueOf(element));
}

@Override public void beforeClickOn(WebElement element, WebDriver driver) {
messages.add("WebDriverEventListener: Attempt to click on the element");
}

@Override public void afterClickOn(WebElement element, WebDriver driver) {
messages.add("WebDriverEventListener: Thee element was clicked");
}

@Override public void beforeChangeValueOf(WebElement element, WebDriver driver) {
messages.add("WebDriverEventListener: Attempt to change value of the element");
}

@Override public void afterChangeValueOf(WebElement element, WebDriver driver) {
messages.add("WebDriverEventListener: The value of the element was changed");
}

@Override public void beforeScript(String script, WebDriver driver) {
messages.add("WebDriverEventListener: Attempt to perform java script: " + script);
}

@Override public void afterScript(String script, WebDriver driver) {
messages.add("WebDriverEventListener: Java script " + script + " was performed");
}

@Override public void onException(Throwable throwable, WebDriver driver) {
messages.add("WebDriverEventListener: The exception was thrown: " + throwable.toString());
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -7,3 +7,4 @@ io.appium.java_client.events.listeners.ExceptionListener
io.appium.java_client.events.listeners.JavaScriptListener
io.appium.java_client.events.listeners.NavigationListener
io.appium.java_client.events.listeners.SearchingListener
io.appium.java_client.events.listeners.AppiumListener

0 comments on commit 933cdb9

Please sign in to comment.