package com.abmash.test;
import com.abmash.api.Browser;
import com.abmash.api.HtmlElement;
import com.abmash.api.HtmlElements;
import org.junit.AfterClass;
import org.junit.BeforeClass;
import org.junit.Test;
import java.util.Arrays;
import java.util.HashSet;
import static com.abmash.api.query.QueryFactory.*;
import static org.hamcrest.Matchers.*;
import static org.hamcrest.Matchers.not;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertThat;
//import static org.hamcrest.core.Is.is;
//import static org.hamcrest.core.IsNot.not;
//import static org.hamcrest.core.IsEqual.equalTo;
//import static org.hamcrest.core.IsInstanceOf.instanceOf;
//import static org.hamcrest.core.IsSame.sameInstance;
//import static org.hamcrest.core.IsNull.*;
//import static org.hamcrest.core.AllOf.*;
//import static org.hamcrest.core.AnyOf.*;
public class TestAbmashCore {
static Browser browser;
@BeforeClass
public static void oneTimeSetUp() {
// one-time initialization code
browser = new Browser();
}
@AfterClass
public static void oneTimeTearDown() {
// one-time cleanup code
browser.close();
}
// HTMLQuery tests
// TODO http://acama-systems.de/contact errors
@Test
public void bodyElementIsFoundExactlyOnceWithJQuery() {
goToUrlAndDontReloadIfAlreadyOpen("http://acama-systems.de/");
HtmlElements elements = browser.query(select("html > body")).find();
assertEquals(1, elements.size());
assertEquals("body", elements.first().getTagName());
}
@Test
public void bodyElementIsFoundExactlyOnceWithXPath() {
goToUrlAndDontReloadIfAlreadyOpen("http://acama-systems.de/");
HtmlElements elements = browser.query(xPath("//html/body")).find();
assertEquals(1, elements.size());
assertEquals("body", elements.first().getTagName());
}
@Test
public void elementsAreFoundBySelectPredicate() {
goToUrlAndDontReloadIfAlreadyOpen("http://acama-systems.de/");
HtmlElements elements = browser.query(select("a")).find();
assertThat(elements.size(), not(is(0)));
for (HtmlElement element: elements) {
assertThat("a", equalTo(element.getTagName()));
}
}
@Test
public void typableElementsAreFound() {
goToUrlAndDontReloadIfAlreadyOpen("http://acama-systems.de/");
HtmlElements elements = browser.query(typable()).find();
// TODO
// assertThat(0, not(is(elements.size())));
}
@Test
public void elementHasNoAttributes() {
goToUrlAndDontReloadIfAlreadyOpen("http://acama-systems.de/");
HtmlElement element = browser.query(select("html > body")).findFirst();
HashSet<String> expctdAttributeNames = new HashSet<String>();
HashSet<String> actualAttributeNames = new HashSet<String>(element.getAttributeNames());
assertEquals(expctdAttributeNames, actualAttributeNames);
}
@Test
public void elementHasOneAttribute() {
goToUrlAndDontReloadIfAlreadyOpen("http://acama-systems.de/");
HtmlElement element = browser.query(select("html > body > div#page_margins")).findFirst();
HashSet<String> expctdAttributeNames = new HashSet<String>(Arrays.asList("id"));
HashSet<String> actualAttributeNames = new HashSet<String>(element.getAttributeNames());
assertEquals(expctdAttributeNames, actualAttributeNames);
}
@Test
public void elementHasMultipleAttributes() {
goToUrlAndDontReloadIfAlreadyOpen("http://acama-systems.de/");
HtmlElement element = browser.query(select("#topnav > a")).findFirst();
HashSet<String> expctdAttributeNames = new HashSet<String>(Arrays.asList("class", "title", "href"));
HashSet<String> actualAttributeNames = new HashSet<String>(element.getAttributeNames());
assertEquals(expctdAttributeNames, actualAttributeNames);
}
// @Test
// public void popupsAreNotFocused() {
// goToUrlAndDontReloadIfAlreadyOpen("http://jadranka.hr/");
// Popups popups = browser.window().getPopups();
// HtmlElements htmllinks = browser.query(select("a")).find();
// assertThat(popups.size(), is(1));
// assertThat(htmllinks.size(), greaterThan(1));
// }
private void goToUrlAndDontReloadIfAlreadyOpen(String url) {
if(!browser.getCurrentUrl().equals(url)) {
browser.openUrl(url);
}
}
}