diff --git a/.gitignore b/.gitignore index c9ee1e5e..e6a1e627 100644 --- a/.gitignore +++ b/.gitignore @@ -1,5 +1,17 @@ -/target -/.settings -.project -.classpath -errorPage.html \ No newline at end of file +# ECLIPSE +# +/target +/.settings +.project +.classpath + +# IntelliJ IDEA +# +*.iml +/.idea + +# Others +# +errorPage.html +phantomjsdriver.log +errorPage.png diff --git a/LICENSE.txt b/LICENSE.txt index f1de08a7..9d917ebb 100644 --- a/LICENSE.txt +++ b/LICENSE.txt @@ -1,4 +1,4 @@ -Copyright (c) 2014 seleniumQuery Team and contributors https://github.com/seleniumQuery +Copyright (c) 2014 seleniumQuery authors Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. diff --git a/README.md b/README.md index a87b598f..c4cd9d99 100644 --- a/README.md +++ b/README.md @@ -1,10 +1,7 @@ -#seleniumQuery - Cross-Driver jQuery in Selenium +#[seleniumQuery](http://seleniumquery.github.io) +###*Cross-Driver* jQuery-like Java interface for Selenium WebDriver -http://seleniumquery.github.io - -###Cross-Driver (Cross-Browser) jQuery-like native Java interface for Selenium WebDriver - -seleniumQuery is a Java library/framework that intends to bring a "cross-driver" (cross-browser) **jQuery-like interface in** (pure) **Java** for [Selenium WebDriver](http://docs.seleniumhq.org/projects/webdriver/). +seleniumQuery is a Java library/framework that brings a ***cross-driver*** **jQuery-like** interface for [Selenium WebDriver](http://docs.seleniumhq.org/projects/webdriver/). Example snippet: @@ -17,9 +14,9 @@ $("input.street").val("4th St!"); Allows querying elements by: -- **XPath** - `$("//div/*/label")` -- **CSS Selectors** - `$(".myClass")`, -- **jQuery/Sizzle enhancements** - `:eq()`: `$(".myClass:eq(3)")`, `:contains()`: `$(".myClass:contains('My Text!')")` +- **CSS3 Selectors** - `$(".myClass")`, `$("#table tr:nth-child(3n+1)")`; +- **jQuery/Sizzle enhancements** - `$(":text:eq(3)")`, `$(".myClass:contains('My Text!')")`; +- **XPath** - `$("//div/*/label/preceding::*")`; - and even some own **seleniumQuery selectors**: `$("#myOldDiv").is(":not(:present)")`. Built using Selenium WebDriver's native capabilities **only**: @@ -27,10 +24,8 @@ Built using Selenium WebDriver's native capabilities **only**: - No `jQuery.js` is embedded at the page, no side-effects are generated; - Doesn't matter if the page uses jQuery or not (or even if the JavaScript global variable `$` is other library like `Prototype.js`). - Capable of handling/testing **JavaScript-disabled pages** - - Test pages that use [Unobtrusive JavaScript!](http://en.wikipedia.org/wiki/Unobtrusive_JavaScript) - - Most functions don't even require a browser/driver with JavaScript enabled! - - Exceptions are functions like `.trigger()` which naturally require JavaScript to execute and some that don't have "human-user" equivalent, like `.html()`, in the sense that ordinary users don't generally care about the HTML of the page. - + - Test pages that use [Unobtrusive JavaScript](http://en.wikipedia.org/wiki/Unobtrusive_JavaScript). + - Most functions don't even require the browser/driver to have JavaScript enabled! ##Quickstart: A running example @@ -39,61 +34,47 @@ Try it out now with the running example below: ```java import static io.github.seleniumquery.SeleniumQuery.$; // this will allow the short syntax -import org.openqa.selenium.firefox.FirefoxDriver; - public class SeleniumQueryExample { - public static void main(String[] args) { - $.browser.setDefaultDriver(new FirefoxDriver()); // sets the driver used by $() - - $.browser.openUrl("http://www.google.com"); - - $("input[name='q']").val("selenium"); - $("button[name='btnG']").click(); - - String resultsText = $("#resultStats").text(); - System.out.println(resultsText); - - // Besides the short syntax and the jQuery behavior you already know, - // other very useful function in seleniumQuery is .waitUntil(), - // especially handy for handling/testing Ajax enabled pages: - - $("input[name='q']").waitUntil().is(":enabled"); - // The line above waits for no time, as that input - // is always enabled in google.com. - - $.browser.quitDefaultBrowser(); // quits the firefox driver - } + public static void main(String[] args) { + // sets Firefox as the driver (this is optional, if omitted, will default to HtmlUnit) + $.driver().useFirefox().withoutJavaScript(); // JavaScript will be disabled! + + $.url("http://www.google.com/?hl=en"); + + $(":text[name='q']").val("selenium"); // the keys are actually typed! + $(":button:contains('Google Search')").click(); + // Another way: $(":text[name='q']").val("selenium").submit(); + + // Besides the short syntax and the jQuery behavior you already know, + // other very useful function in seleniumQuery is .waitUntil(), + // handy for dealing with user-waiting actions (specially in Ajax enabled pages): + String resultsText = $("#resultStats").waitUntil().is(":visible").then().text(); + System.out.println(resultsText); + + $.quit(); // quits the currently used driver (firefox) + } } ``` -To get seleniumQuery's latest snapshot, add this to your **`pom.xml`**: +The code above can be found at the [seleniumQuery demos project](https://github.com/seleniumQuery/seleniumQuery-demos). + +To get seleniumQuery's the latest version, add to your **`pom.xml`**: ```xml - - - - io.github.seleniumquery - seleniumquery - 1.0.0-SNAPSHOT - - - - - - sonatype-nexus-snapshots - Sonatype Nexus Snapshots - https://oss.sonatype.org/content/repositories/snapshots/ - - true - always - - - + + io.github.seleniumquery + seleniumquery + 0.9.0 + ``` +
+ #Features -###Readable jQuery syntax code you already know +seleniumQuery aims to implement all relevant jQuery functions, as well as adding some of our own. Our main goal is to make emulating user actions and reading the state of pages easier than ever, with a consistent behavior across drivers. + + +###Readable jQuery syntax you already know Make your code/tests more readable and easier to maintain. Leverage your knowledge of jQuery. @@ -106,186 +87,193 @@ new Select(element).selectByValue("ford"); $("#mySelect").val("ford"); ``` +Get to know what jQuery functions seleniumQuery supports and what else it brings to the table on our [seleniumQuery API wiki page](https://github.com/seleniumQuery/seleniumQuery/wiki/seleniumQuery-API). + +###Powerful selector system + +Let the tool do the hard work and find elements easily: + +- CSS3 Selectors - `$(".myClass")`, `$("#table tr:nth-child(3n+1)")` +- jQuery/Sizzle enhancements - `$(".claz:eq(3)")`, `$(".claz:contains('My Text!')")` +- XPath - `$("//div/*/label/preceding::*")` +- and even some own seleniumQuery selectors: `$("#myOldDiv").is(":not(:present)")`. + +You pick your style. Whatever is more interesting at the moment. Mixing is OK: + +```java +$("#tab tr:nth-child(3n+1)").find("/img[@alt='calendar']/preceding::input").val("2014-11-12") +``` +Find more about them in [seleniumQuery Selectors wiki page.](https://github.com/seleniumQuery/seleniumQuery/wiki/seleniumQuery-Selectors) + +
###Waiting capabilities for improved Ajax testing -Other important feature is the leverage of `WebDriver`'s `FluentWait` capabilities **directly** in the element (so long, boilerplate code!) through the use of the `.waitUntil()` function: +Other important feature is the leverage of `WebDriver`'s `FluentWait` capabilities **directly** in the element (no boilerplate code!) through the use of the `.waitUntil()` function: ```java -/* - * Selenium WebDriver cannot natively detect the end of an Ajax call. - * To test your application behaviour, you can and should work with the Ajax's expected effects. - * - * Below is an example of a
that should be hidden as effect of an Ajax call. - * The code will only continue after it is gone. If not, it will throw a timeout exception. - */ -$("#ajaxDiv").click(); -$("#ajaxDiv").waitUntil().is(":not(:visible)"); +// WebDriver cannot natively detect the end of an Ajax call. +// To test your application's behavior, you can and should always work with the +// Ajax's expected effects, visible for the end user. +// Below is an example of a
that should be hidden as effect of an Ajax call. +// The code will hold until the modal is gone. If it is never gone, seleniumQuery +// will throw a timeout exception. +$("#modalDiv :button:contains('OK')").click(); +$("#modalDiv :button:contains('OK')").waitUntil().is(":not(:visible)"); // Or, fluently: -$("#ajaxDiv").click().waitUntil().is(":not(:visible)"); +$("#modalDivOkButton").click().waitUntil().is(":not(:visible)"); ``` -And, yeah, that's right, the `.is()` function above is your old-time friend that takes a selector as argument! +And, that's right, the `.is()` function above is your old-time friend that takes a selector as argument! -#API +Check out what else `.waitUntil()` can do in the [seleniumQuery API wiki page](https://github.com/seleniumQuery/seleniumQuery/wiki/seleniumQuery-API). -For the currently implemented jQuery functions check the [supported list below](#supported-jquery-functions). +
-In order to handle interactions with Ajax-enabled pages, you can use the `.waitUntil()` function: +###Plugin System -- The `.waitUntil()` functions will *requery* the DOM for the elements until the given condition is met, returning a **new** seleniumQuery object when that happens. +seleniumQuery supports plugins through the `.as(PLUGIN)` function, such as: ```java -// .waitUntil() will requery the DOM every time until the matched set fulfills the requirements - -// .is() functions -$(".aDivDiv").waitUntil().is(":present"); -$(".myInput").waitUntil().is(":enabled"); -$(".aDivDiv").waitUntil().is(":visible"); -$(".myInput").waitUntil().is(":visible:enabled"); -// functions such as .val(), .text() and others are also available -$(".myInput").waitUntil().val().isEqualTo("expectedValue"); -$(".aDivDiv").waitUntil().text().contains("expectedText"); -// and more... -$(".myInput").waitUntil().val().matches(".*\d{10}\*"); -$(".myInput").waitUntil().size().isGreaterThan(7); -$(".aDivDiv").waitUntil().html().contains("
expected
"); +$("div").as(YOURPLUGIN).someMethodFromYourPlugin(); ``` -Global object (static) functions: +There are some default plugins. To check them out, call `.as()` without arguments. Example: + +```java +// the .select() plugin +$("#citiesSelect").as().select().selectByVisibleText("New York"); +// picks an
+ +

+ + +

this hi's id must be escaped

\ No newline at end of file diff --git a/src/test/java/integration/selectors/mixed/MixedSelectorsTest.java b/src/test/java/integration/selectors/mixed/MixedSelectorsTest.java new file mode 100644 index 00000000..137db6fa --- /dev/null +++ b/src/test/java/integration/selectors/mixed/MixedSelectorsTest.java @@ -0,0 +1,201 @@ +package integration.selectors.mixed; + +import infrastructure.junitrule.SetUpAndTearDownDriver; +import org.junit.ClassRule; +import org.junit.Rule; +import org.junit.Test; +import org.openqa.selenium.WebElement; + +import java.util.List; + +import static io.github.seleniumquery.SeleniumQuery.$; +import static org.hamcrest.Matchers.*; +import static org.junit.Assert.assertThat; + +public class MixedSelectorsTest { + + @ClassRule public static SetUpAndTearDownDriver setUpAndTearDownDriverRule = new SetUpAndTearDownDriver(); + @Rule public SetUpAndTearDownDriver setUpAndTearDownDriverRuleInstance = setUpAndTearDownDriverRule; + + @Test + public void id() { + List elements = $("#d1").get(); + + assertThat(elements, hasSize(1)); + assertThat(elements.get(0).getTagName(), is("div")); + assertThat(elements.get(0).getAttribute("id"), is("d1")); + assertThat(elements.get(0).getAttribute("class"), is("clz")); + } + + @Test + public void id_with_escape() { + List elements = $("#must\\:escape").get(); + + assertThat(elements, hasSize(1)); + assertThat(elements.get(0).getTagName(), is("h1")); + assertThat(elements.get(0).getAttribute("id"), is("must:escape")); + } + + @Test + public void tag() { + List elements = $("div").get(); + + assertThat(elements, hasSize(3)); + assertThat(elements.get(0).getTagName(), is("div")); + assertThat(elements.get(0).getAttribute("id"), is("d1")); + assertThat(elements.get(0).getAttribute("class"), is("clz")); + + assertThat(elements.get(1).getTagName(), is("div")); + assertThat(elements.get(1).getAttribute("id"), is("d11")); + assertThat(elements.get(1).getAttribute("class"), is("clz1")); + + assertThat(elements.get(2).getTagName(), is("div")); + assertThat(elements.get(2).getAttribute("id"), is("d2")); + assertThat(elements.get(2).getAttribute("class"), is("clzx")); + } + + @Test + public void tag_and_class() { + List elements = $("div.clz").get(); + + assertThat(elements, hasSize(1)); + assertThat(elements.get(0).getTagName(), is("div")); + assertThat(elements.get(0).getAttribute("id"), is("d1")); + assertThat(elements.get(0).getAttribute("class"), is("clz")); + } + + @Test + public void tag_and_tag_descendant() { + List elements = $("div div").get(); + + assertThat(elements, hasSize(1)); + assertThat(elements.get(0).getTagName(), is("div")); + assertThat(elements.get(0).getAttribute("id"), is("d11")); + assertThat(elements.get(0).getAttribute("class"), is("clz1")); + } + + @Test + public void tag_and_class_AND_tag_and_class_descendant() { + List elements = $("div.clz select.clz").get(); + + assertThat(elements, hasSize(1)); + assertThat(elements.get(0).getTagName(), is("select")); + assertThat(elements.get(0).getAttribute("id"), is("s1")); + assertThat(elements.get(0).getAttribute("class"), is("clz")); + } + + @Test(expected = RuntimeException.class) + public void hidden_pseudo() { + List elements = $("p:hidden").get(); + + assertThat(elements, hasSize(1)); + assertThat(elements.get(0).getTagName(), is("p")); + assertThat(elements.get(0).getAttribute("id"), is("hiddenP")); + assertThat(elements.get(0).getAttribute("class"), is("clz")); + assertThat(elements.get(0).getAttribute("style"), containsString("display: none")); + } + + @Test(expected = RuntimeException.class) + public void hidden_pseudo_as_parent_and_descendant() { + List elements = $("p:hidden span.spanYo:hidden").get(); + for (WebElement webElement : elements) { + System.out.println("@# El: "+webElement); + } + + assertThat(elements, hasSize(1)); + assertThat(elements.get(0).getTagName(), is("span")); + assertThat(elements.get(0).getAttribute("class"), is("spanYo")); + assertThat(elements.get(0).getAttribute("style"), containsString("display: none")); + } + + @Test + public void tag_and_tag_direct_adjacent() { + List elements = $("option + option").get(); + + assertThat(elements, hasSize(2)); + + assertThat(elements.get(0).getTagName(), is("option")); + assertThat(elements.get(0).getAttribute("id"), is("o11")); + assertThat(elements.get(0).getAttribute("class"), is("opt")); + assertThat(elements.get(0).getAttribute("value"), is("")); + assertThat(elements.get(0).getAttribute("selected"), is("true")); + + assertThat(elements.get(1).getTagName(), is("option")); + assertThat(elements.get(1).getAttribute("id"), is("o22")); + assertThat(elements.get(1).getAttribute("class"), is("opt")); + assertThat(elements.get(1).getAttribute("value"), is("")); + } + + @Test(expected = RuntimeException.class) + public void tag_and_tag_direct_adjacent_with_pseudo() { + List elements = $("span.spanYo:hidden + span:hidden").get(); + + assertThat(elements, hasSize(1)); + assertThat(elements.get(0).getTagName(), is("span")); + assertThat(elements.get(0).getAttribute("class"), is("yo2")); + assertThat(elements.get(0).getAttribute("style"), containsString("display: none")); + } + + @Test + public void tag_class_and_tag_general_adjacent() { + List elements = $("div.clz ~ h1").get(); + + assertThat(elements, hasSize(1)); + assertThat(elements.get(0).getTagName(), is("h1")); + assertThat(elements.get(0).getAttribute("id"), is("must:escape")); + } + + @Test(expected = RuntimeException.class) + public void tag_and_tag_general_adjacent_with_pseudo() { + List elements = $(".spanYo:hidden ~ button").get(); + + assertThat(elements, hasSize(2)); + assertThat(elements.get(0).getTagName(), is("button")); + assertThat(elements.get(0).getAttribute("class"), is("btnn")); + + assertThat(elements.get(1).getTagName(), is("button")); + assertThat(elements.get(1).getAttribute("id"), is("bA")); + assertThat(elements.get(1).getAttribute("style"), containsString("display: none")); + } + + @Test + public void tag_class_and_tag_child_selector() { + List elements = $("select > option").get(); + + assertThat(elements, hasSize(4)); + assertThat(elements.get(0).getTagName(), is("option")); + assertThat(elements.get(0).getAttribute("id"), is("o1")); + assertThat(elements.get(0).getAttribute("value"), is("")); + + assertThat(elements.get(1).getTagName(), is("option")); + assertThat(elements.get(1).getAttribute("id"), is("o11")); + assertThat(elements.get(1).getAttribute("class"), is("opt")); + assertThat(elements.get(1).getAttribute("value"), is("")); + + assertThat(elements.get(2).getTagName(), is("option")); + assertThat(elements.get(2).getAttribute("id"), is("o2")); + assertThat(elements.get(2).getAttribute("value"), is("")); + + assertThat(elements.get(3).getTagName(), is("option")); + assertThat(elements.get(3).getAttribute("id"), is("o22")); + assertThat(elements.get(3).getAttribute("class"), is("opt")); + assertThat(elements.get(3).getAttribute("value"), is("")); + } + + + @Test(expected = RuntimeException.class) + public void tag_class_and_tag_child_selector__with_pseudo_on_both() { + List elementsZero = $("select:hidden > option").get(); + assertThat(elementsZero, hasSize(0)); + + List elements = $("body > :hidden > :hidden").get(); + + assertThat(elements, hasSize(5)); + assertThat(elements.get(0).getTagName(), is("button")); + assertThat(elements.get(1).getTagName(), is("span")); + assertThat(elements.get(2).getTagName(), is("span")); + assertThat(elements.get(3).getTagName(), is("button")); + assertThat(elements.get(4).getTagName(), is("button")); + } + +} \ No newline at end of file diff --git a/src/test/java/io/github/seleniumquery/selector/conditionals/pseudoclasses/HeaderPseudoClassTest.html b/src/test/java/integration/selectors/pseudoclasses/HeaderPseudoClassTest.html similarity index 100% rename from src/test/java/io/github/seleniumquery/selector/conditionals/pseudoclasses/HeaderPseudoClassTest.html rename to src/test/java/integration/selectors/pseudoclasses/HeaderPseudoClassTest.html diff --git a/src/test/java/io/github/seleniumquery/selector/conditionals/pseudoclasses/HeaderPseudoClassTest.java b/src/test/java/integration/selectors/pseudoclasses/HeaderPseudoClassTest.java similarity index 80% rename from src/test/java/io/github/seleniumquery/selector/conditionals/pseudoclasses/HeaderPseudoClassTest.java rename to src/test/java/integration/selectors/pseudoclasses/HeaderPseudoClassTest.java index 177792a2..43fbdcf2 100644 --- a/src/test/java/io/github/seleniumquery/selector/conditionals/pseudoclasses/HeaderPseudoClassTest.java +++ b/src/test/java/integration/selectors/pseudoclasses/HeaderPseudoClassTest.java @@ -1,46 +1,47 @@ -package io.github.seleniumquery.by.evaluator.conditionals.pseudoclasses; - -import static io.github.seleniumquery.SeleniumQuery.$; -import static org.hamcrest.Matchers.is; -import static org.junit.Assert.assertThat; -import io.github.seleniumquery.SetUpAndTearDownDriver; - -import org.junit.Rule; -import org.junit.Test; - -public class HeaderPseudoClassTest { - - @Rule - public SetUpAndTearDownDriver setUpAndTearDownDriverRule = new SetUpAndTearDownDriver(); - - // http://jsbin.com/bemufole/1/edit - @Test - public void headerPseudoClass() { - assertThat($(":header").size(), is(10)); - assertThat($("*:header").size(), is(10)); - - assertThat($("h0:header").size(), is(1)); - assertThat($("h0").is(":header"), is(true)); - assertThat($("h1:header").size(), is(1)); - assertThat($("h1").is(":header"), is(true)); - assertThat($("h2:header").size(), is(1)); - assertThat($("h2").is(":header"), is(true)); - assertThat($("h3:header").size(), is(1)); - assertThat($("h3").is(":header"), is(true)); - assertThat($("h4:header").size(), is(1)); - assertThat($("h4").is(":header"), is(true)); - assertThat($("h5:header").size(), is(1)); - assertThat($("h5").is(":header"), is(true)); - assertThat($("h6:header").size(), is(1)); - assertThat($("h6").is(":header"), is(true)); - assertThat($("h7:header").size(), is(1)); - assertThat($("h7").is(":header"), is(true)); - assertThat($("h8:header").size(), is(1)); - assertThat($("h8").is(":header"), is(true)); - assertThat($("h9:header").size(), is(1)); - assertThat($("h9").is(":header"), is(true)); - assertThat($("h10:header").size(), is(0)); - assertThat($("h10").is(":header"), is(false)); - } - +package integration.selectors.pseudoclasses; + +import static io.github.seleniumquery.SeleniumQuery.$; +import static org.hamcrest.Matchers.is; +import static org.junit.Assert.assertThat; +import infrastructure.junitrule.SetUpAndTearDownDriver; + +import org.junit.ClassRule; +import org.junit.Rule; +import org.junit.Test; + +public class HeaderPseudoClassTest { + + @ClassRule public static SetUpAndTearDownDriver setUpAndTearDownDriverRule = new SetUpAndTearDownDriver(); + @Rule public SetUpAndTearDownDriver setUpAndTearDownDriverRuleInstance = setUpAndTearDownDriverRule; + + // http://jsbin.com/bemufole/1/edit + @Test + public void headerPseudoClass() { + assertThat($(":header").size(), is(10)); + assertThat($("*:header").size(), is(10)); + + assertThat($("h0:header").size(), is(1)); + assertThat($("h0").is(":header"), is(true)); + assertThat($("h1:header").size(), is(1)); + assertThat($("h1").is(":header"), is(true)); + assertThat($("h2:header").size(), is(1)); + assertThat($("h2").is(":header"), is(true)); + assertThat($("h3:header").size(), is(1)); + assertThat($("h3").is(":header"), is(true)); + assertThat($("h4:header").size(), is(1)); + assertThat($("h4").is(":header"), is(true)); + assertThat($("h5:header").size(), is(1)); + assertThat($("h5").is(":header"), is(true)); + assertThat($("h6:header").size(), is(1)); + assertThat($("h6").is(":header"), is(true)); + assertThat($("h7:header").size(), is(1)); + assertThat($("h7").is(":header"), is(true)); + assertThat($("h8:header").size(), is(1)); + assertThat($("h8").is(":header"), is(true)); + assertThat($("h9:header").size(), is(1)); + assertThat($("h9").is(":header"), is(true)); + assertThat($("h10:header").size(), is(0)); + assertThat($("h10").is(":header"), is(false)); + } + } \ No newline at end of file diff --git a/src/test/java/io/github/seleniumquery/selector/conditionals/pseudoclasses/NotSelectorTest.html b/src/test/java/integration/selectors/pseudoclasses/NotSelectorTest.html similarity index 95% rename from src/test/java/io/github/seleniumquery/selector/conditionals/pseudoclasses/NotSelectorTest.html rename to src/test/java/integration/selectors/pseudoclasses/NotSelectorTest.html index 73472b42..4375ccf7 100644 --- a/src/test/java/io/github/seleniumquery/selector/conditionals/pseudoclasses/NotSelectorTest.html +++ b/src/test/java/integration/selectors/pseudoclasses/NotSelectorTest.html @@ -1,12 +1,12 @@ - - - - - SeleniumQuery Basic Test Page - - -
Batman
-
Spider Man
-
Hulk
- + + + + + SeleniumQuery Basic Test Page + + +
Batman
+
Spider Man
+
Hulk
+ \ No newline at end of file diff --git a/src/test/java/io/github/seleniumquery/selector/conditionals/pseudoclasses/NotSelectorTest.java b/src/test/java/integration/selectors/pseudoclasses/NotSelectorTest.java similarity index 80% rename from src/test/java/io/github/seleniumquery/selector/conditionals/pseudoclasses/NotSelectorTest.java rename to src/test/java/integration/selectors/pseudoclasses/NotSelectorTest.java index fff0ec04..70955d6d 100644 --- a/src/test/java/io/github/seleniumquery/selector/conditionals/pseudoclasses/NotSelectorTest.java +++ b/src/test/java/integration/selectors/pseudoclasses/NotSelectorTest.java @@ -1,49 +1,50 @@ -package io.github.seleniumquery.by.evaluator.conditionals.pseudoclasses; - -import static io.github.seleniumquery.SeleniumQuery.$; -import static org.hamcrest.Matchers.is; -import static org.junit.Assert.assertThat; -import io.github.seleniumquery.SetUpAndTearDownDriver; - -import org.junit.Rule; -import org.junit.Test; - -public class NotSelectorTest { - - @Rule - public SetUpAndTearDownDriver setUpAndTearDownDriverRule = new SetUpAndTearDownDriver(); - - @Test - public void notPseudoClass() throws Exception { - assertThat($("div").size(), is(3)); - assertThat($("div.c1").size(), is(1)); - assertThat($("div.c2").size(), is(1)); - assertThat($("div.c3").size(), is(1)); - assertThat($("*:not(*)").size(), is(0)); - - assertThat($("div:not(.c1)").size(), is(2)); - assertThat($(".c1").is("div:not(.c1)"), is(false)); - assertThat($(".c2").is("div:not(.c1)"), is(true)); - assertThat($(".c2").is("div:not(.c1)"), is(true)); - - assertThat($("div:not(.c2)").size(), is(2)); - assertThat($("div:not(.c3)").size(), is(2)); - assertThat($("div:not(.w00t)").size(), is(1)); - } - - // http://jsbin.com/miludaqe/1/edit - @Test - public void nesting_up_to_two_levels() { - assertThat($("div.c3").size(), is(1)); - assertThat($("div:not(.c3)").size(), is(2)); - assertThat($("div:not(:not(.c3))").size(), is(1)); - assertThat($("div:not(:not(:not(.c3)))").size(), is(2)); - } - - @Test - public void notPseudoClass__with_selector_list() { - assertThat($("div:not(.c3,.c1)").size(), is(1)); - assertThat($("div:not(.c3,.c1)").is(".c2"), is(true)); - } - +package integration.selectors.pseudoclasses; + +import static io.github.seleniumquery.SeleniumQuery.$; +import static org.hamcrest.Matchers.is; +import static org.junit.Assert.assertThat; +import infrastructure.junitrule.SetUpAndTearDownDriver; + +import org.junit.ClassRule; +import org.junit.Rule; +import org.junit.Test; + +public class NotSelectorTest { + + @ClassRule public static SetUpAndTearDownDriver setUpAndTearDownDriverRule = new SetUpAndTearDownDriver(); + @Rule public SetUpAndTearDownDriver setUpAndTearDownDriverRuleInstance = setUpAndTearDownDriverRule; + + @Test + public void notPseudoClass() throws Exception { + assertThat($("div").size(), is(3)); + assertThat($("div.c1").size(), is(1)); + assertThat($("div.c2").size(), is(1)); + assertThat($("div.c3").size(), is(1)); + assertThat($("*:not(*)").size(), is(0)); + + assertThat($("div:not(.c1)").size(), is(2)); + assertThat($(".c1").is("div:not(.c1)"), is(false)); + assertThat($(".c2").is("div:not(.c1)"), is(true)); + assertThat($(".c2").is("div:not(.c1)"), is(true)); + + assertThat($("div:not(.c2)").size(), is(2)); + assertThat($("div:not(.c3)").size(), is(2)); + assertThat($("div:not(.w00t)").size(), is(1)); + } + + // http://jsbin.com/miludaqe/1/edit + @Test + public void nesting_up_to_two_levels() { + assertThat($("div.c3").size(), is(1)); + assertThat($("div:not(.c3)").size(), is(2)); + assertThat($("div:not(:not(.c3))").size(), is(1)); + assertThat($("div:not(:not(:not(.c3)))").size(), is(2)); + } + + @Test + public void notPseudoClass__with_selector_list() { + assertThat($("div:not(.c3,.c1)").size(), is(1)); + assertThat($("div:not(.c3,.c1)").is(".c2"), is(true)); + } + } \ No newline at end of file diff --git a/src/test/java/io/github/seleniumquery/selector/conditionals/pseudoclasses/PresentSelectorTest.html b/src/test/java/integration/selectors/pseudoclasses/PresentSelectorTest.html similarity index 96% rename from src/test/java/io/github/seleniumquery/selector/conditionals/pseudoclasses/PresentSelectorTest.html rename to src/test/java/integration/selectors/pseudoclasses/PresentSelectorTest.html index 1acfb151..efbb7bd8 100644 --- a/src/test/java/io/github/seleniumquery/selector/conditionals/pseudoclasses/PresentSelectorTest.html +++ b/src/test/java/integration/selectors/pseudoclasses/PresentSelectorTest.html @@ -1,20 +1,20 @@ - - - - - seleniumQuery :present test page - - - -
Yo
-
otherPresentDiv
- - + + + + + seleniumQuery :present test page + + + +
Yo
+
otherPresentDiv
+ + \ No newline at end of file diff --git a/src/test/java/integration/selectors/pseudoclasses/PresentSelectorTest.java b/src/test/java/integration/selectors/pseudoclasses/PresentSelectorTest.java new file mode 100644 index 00000000..abb55ad9 --- /dev/null +++ b/src/test/java/integration/selectors/pseudoclasses/PresentSelectorTest.java @@ -0,0 +1,53 @@ +package integration.selectors.pseudoclasses; + +import infrastructure.junitrule.JavaScriptOnly; +import infrastructure.junitrule.SetUpAndTearDownDriver; +import io.github.seleniumquery.SeleniumQueryObject; +import org.junit.ClassRule; +import org.junit.Rule; +import org.junit.Test; + +import static io.github.seleniumquery.SeleniumQuery.$; +import static org.hamcrest.Matchers.is; +import static org.junit.Assert.assertThat; + +public class PresentSelectorTest { + + @ClassRule public static SetUpAndTearDownDriver setUpAndTearDownDriverRule = new SetUpAndTearDownDriver(); + @Rule public SetUpAndTearDownDriver setUpAndTearDownDriverRuleInstance = setUpAndTearDownDriverRule; + + @Test + public void presentPseudoClass() { + assertThat($("*").size(), is(9)); + assertThat($(":present").size(), is(9)); + + // .is() + assertThat($("#presentDiv").is(":present"), is(true)); + assertThat($("#otherPresentDiv").is(":present"), is(true)); + assertThat($("#otherPresentDiv").is(":not(:present)"), is(false)); + assertThat($("button").is(":present"), is(true)); + assertThat($("#bozo").is(":present"), is(false)); + assertThat($("#bozo").is(":not(:present)"), is(true)); + } + + @Test @JavaScriptOnly + public void presentPseudoClass_while_removing_element_from_DOM() { + SeleniumQueryObject $presentDiv = $("#presentDiv"); + SeleniumQueryObject $otherPresentDiv = $("#otherPresentDiv"); + assertThat($presentDiv.is(":present"), is(true)); + assertThat($otherPresentDiv.is(":present"), is(true)); + + $("button").click(); // removes the #presentDiv + + assertThat($("#presentDiv").size(), is(0)); + assertThat($("#presentDiv").is(":present"), is(false)); + assertThat($("#presentDiv").is(":not(:present)"), is(true)); + assertThat($("#otherPresentDiv").is(":present"), is(true)); + + assertThat($presentDiv.is(":present"), is(false)); + $presentDiv.is(":not(:present)"); + assertThat($presentDiv.is(":not(:present)"), is(true)); + assertThat($otherPresentDiv.is(":present"), is(true)); + } + +} \ No newline at end of file diff --git a/src/test/java/io/github/seleniumquery/selector/conditionals/pseudoclasses/PseudoClassEvaluatorTest.html b/src/test/java/integration/selectors/pseudoclasses/PseudoClassEvaluatorTest.html similarity index 100% rename from src/test/java/io/github/seleniumquery/selector/conditionals/pseudoclasses/PseudoClassEvaluatorTest.html rename to src/test/java/integration/selectors/pseudoclasses/PseudoClassEvaluatorTest.html diff --git a/src/test/java/integration/selectors/pseudoclasses/PseudoClassEvaluatorTest.java b/src/test/java/integration/selectors/pseudoclasses/PseudoClassEvaluatorTest.java new file mode 100644 index 00000000..33b7dbed --- /dev/null +++ b/src/test/java/integration/selectors/pseudoclasses/PseudoClassEvaluatorTest.java @@ -0,0 +1,219 @@ +package integration.selectors.pseudoclasses; + +import static io.github.seleniumquery.SeleniumQuery.$; +import static org.hamcrest.Matchers.is; +import static org.junit.Assert.assertThat; +import infrastructure.junitrule.SetUpAndTearDownDriver; +import io.github.seleniumquery.by.css.CssSelectorMatcherService; + +import java.util.List; + +import org.junit.Before; +import org.junit.ClassRule; +import org.junit.Rule; +import org.junit.Test; +import org.openqa.selenium.By; +import org.openqa.selenium.WebDriver; +import org.openqa.selenium.WebElement; + +public class PseudoClassEvaluatorTest { + + @ClassRule public static SetUpAndTearDownDriver setUpAndTearDownDriverRule = new SetUpAndTearDownDriver(); + @Rule public SetUpAndTearDownDriver setUpAndTearDownDriverRuleInstance = setUpAndTearDownDriverRule; + + WebDriver driver; + + @Before + public void before() { + driver = $.driver().get(); + } + + @Test + public void option() { + WebElement optionElement = driver.findElement(By.cssSelector(".e4")); + + assertThat(CssSelectorMatcherService.elementMatchesStringSelector(driver, optionElement, "option"), is(true)); + assertThat(CssSelectorMatcherService.elementMatchesStringSelector(driver, optionElement, "*"), is(true)); + assertThat(CssSelectorMatcherService.elementMatchesStringSelector(driver, optionElement, ":not(div)"), is(true)); + assertThat(CssSelectorMatcherService.elementMatchesStringSelector(driver, optionElement, ":not(:not(div))"), is(false)); + assertThat(CssSelectorMatcherService.elementMatchesStringSelector(driver, optionElement, ":not(:not(option.e4))"), is(true)); + assertThat(CssSelectorMatcherService.elementMatchesStringSelector(driver, optionElement, ":only-of-type"), is(false)); + } + + @Test + public void html() { + WebElement htmlElement = driver.findElement(By.cssSelector("html")); + + assertThat(CssSelectorMatcherService.elementMatchesStringSelector(driver, htmlElement, "option"), is(false)); + assertThat(CssSelectorMatcherService.elementMatchesStringSelector(driver, htmlElement, "*"), is(true)); + assertThat(CssSelectorMatcherService.elementMatchesStringSelector(driver, htmlElement, ":root"), is(true)); + assertThat(CssSelectorMatcherService.elementMatchesStringSelector(driver, htmlElement, ":only-of-type"), is(true)); + } + + @Test + public void body() { + WebElement bodyElement = driver.findElement(By.cssSelector("body")); + + assertThat(CssSelectorMatcherService.elementMatchesStringSelector(driver, bodyElement, "option"), is(false)); + assertThat(CssSelectorMatcherService.elementMatchesStringSelector(driver, bodyElement, "*"), is(true)); + assertThat(CssSelectorMatcherService.elementMatchesStringSelector(driver, bodyElement, ":root"), is(false)); + assertThat(CssSelectorMatcherService.elementMatchesStringSelector(driver, bodyElement, ":only-of-type"), is(true)); + } + + // :lang() + @Test + public void lang() { + WebElement brazilian_p = driver.findElement(By.id("brazilian-p")); + WebElement french_p = driver.findElement(By.id("french-p")); + WebElement hero_combo = driver.findElement(By.id("hero-combo")); + + WebElement htmlElement = driver.findElement(By.cssSelector("html")); + WebElement bodyElement = driver.findElement(By.cssSelector("body")); + + assertThat(CssSelectorMatcherService.elementMatchesStringSelector(driver, french_p, ":lang(fr)"), is(true)); + assertThat(CssSelectorMatcherService.elementMatchesStringSelector(driver, brazilian_p, ":lang(fr)"), is(false)); + assertThat(CssSelectorMatcherService.elementMatchesStringSelector(driver, hero_combo, ":lang(fr)"), is(false)); + + assertThat(CssSelectorMatcherService.elementMatchesStringSelector(driver, bodyElement, ":lang(fr)"), is(false)); + assertThat(CssSelectorMatcherService.elementMatchesStringSelector(driver, htmlElement, ":lang(fr)"), is(false)); + + assertThat(CssSelectorMatcherService.elementMatchesStringSelector(driver, french_p, ":lang(pt-BR)"), is(false)); + assertThat(CssSelectorMatcherService.elementMatchesStringSelector(driver, brazilian_p, ":lang(pt-BR)"), is(true)); + assertThat(CssSelectorMatcherService.elementMatchesStringSelector(driver, hero_combo, ":lang(pt-BR)"), is(true)); + assertThat(CssSelectorMatcherService.elementMatchesStringSelector(driver, bodyElement, ":lang(pt-BR)"), is(true)); + assertThat(CssSelectorMatcherService.elementMatchesStringSelector(driver, htmlElement, ":lang(pt-BR)"), is(false)); + } + + // :only-child + @Test + public void only_child() { + WebElement onlyChild = driver.findElement(By.id("onlyChild")); + WebElement grandsonWithSiblings = driver.findElement(By.id("grandsonWithSiblings")); + WebElement brazilian_p = driver.findElement(By.id("brazilian-p")); + WebElement hero_combo = driver.findElement(By.id("hero-combo")); + WebElement htmlElement = driver.findElement(By.cssSelector("html")); + WebElement bodyElement = driver.findElement(By.cssSelector("body")); + + String selector = ":only-child"; + + assertThat(CssSelectorMatcherService.elementMatchesStringSelector(driver, onlyChild, selector), is(true)); + assertThat(CssSelectorMatcherService.elementMatchesStringSelector(driver, grandsonWithSiblings, selector), is(false)); + assertThat(CssSelectorMatcherService.elementMatchesStringSelector(driver, brazilian_p, selector), is(false)); + assertThat(CssSelectorMatcherService.elementMatchesStringSelector(driver, hero_combo, selector), is(false)); + + assertThat(CssSelectorMatcherService.elementMatchesStringSelector(driver, bodyElement, selector), is(false)); + assertThat(CssSelectorMatcherService.elementMatchesStringSelector(driver, htmlElement, selector), is(false)); + } + + // :contains() + @Test + public void contains_pseudo() throws Exception { + WebElement containsDiv = driver.findElement(By.id("containsDiv")); + List containsDivs = containsDiv.findElements(By.tagName("div")); + + //
abc
+ WebElement div = containsDivs.get(0); + assertThat(CssSelectorMatcherService.elementMatchesStringSelector(driver, div, ":contains(abc)"), is(true)); + assertThat(CssSelectorMatcherService.elementMatchesStringSelector(driver, div, ":contains(ac)"), is(false)); + assertThat(CssSelectorMatcherService.elementMatchesStringSelector(driver, div, ":contains(\"abc\")"), is(true)); + assertThat(CssSelectorMatcherService.elementMatchesStringSelector(driver, div, ":contains('abc')"), is(true)); + assertThat(CssSelectorMatcherService.elementMatchesStringSelector(driver, div, ":contains('\"abc\"')"), is(false)); + assertThat(CssSelectorMatcherService.elementMatchesStringSelector(driver, div, ":contains(\"'abc'\")"), is(false)); + + //
"abc"
+ WebElement div1 = containsDivs.get(1); + assertThat(CssSelectorMatcherService.elementMatchesStringSelector(driver, div1, ":contains(abc)"), is(true)); + assertThat(CssSelectorMatcherService.elementMatchesStringSelector(driver, div1, ":contains(ac)"), is(false)); + assertThat(CssSelectorMatcherService.elementMatchesStringSelector(driver, div1, ":contains(\"abc\")"), is(true)); + assertThat(CssSelectorMatcherService.elementMatchesStringSelector(driver, div1, ":contains('abc')"), is(true)); + assertThat(CssSelectorMatcherService.elementMatchesStringSelector(driver, div1, ":contains('\"abc\"')"), is(true)); // diferenca da 0 + assertThat(CssSelectorMatcherService.elementMatchesStringSelector(driver, div1, ":contains(\"'abc'\")"), is(false)); + + //
'abc'
+ WebElement div2 = containsDivs.get(2); + assertThat(CssSelectorMatcherService.elementMatchesStringSelector(driver, div2, ":contains(abc)"), is(true)); + assertThat(CssSelectorMatcherService.elementMatchesStringSelector(driver, div2, ":contains(ac)"), is(false)); + assertThat(CssSelectorMatcherService.elementMatchesStringSelector(driver, div2, ":contains(\"abc\")"), is(true)); + assertThat(CssSelectorMatcherService.elementMatchesStringSelector(driver, div2, ":contains('abc')"), is(true)); + assertThat(CssSelectorMatcherService.elementMatchesStringSelector(driver, div2, ":contains('\"abc\"')"), is(false)); + assertThat(CssSelectorMatcherService.elementMatchesStringSelector(driver, div2, ":contains(\"'abc'\")"), is(true)); // diferenca da 0 + + //
a"bc
+ WebElement div3 = containsDivs.get(3); +// assertThat(SelectorEvaluator.elementMatchesStringSelector(driver, div3, ":contains(a\\\"bc)"), is(false)); + assertThat(CssSelectorMatcherService.elementMatchesStringSelector(driver, div3, ":contains('a\"bc')"), is(true)); + + //
ab)c
+ WebElement div4 = containsDivs.get(4); + assertThat(CssSelectorMatcherService.elementMatchesStringSelector(driver, div4, ":contains(ab\\)c)"), is(true)); + assertThat(CssSelectorMatcherService.elementMatchesStringSelector(driver, div4, ":contains('ab)c')"), is(true)); + assertThat(CssSelectorMatcherService.elementMatchesStringSelector(driver, div4, ":contains(\"ab)c\")"), is(true)); + } + +// @Test + public void bizarre_escaping() { + WebElement containsDiv = driver.findElement(By.id("containsDiv")); + List containsDivs = containsDiv.findElements(By.tagName("div")); + + //
a\"b)c
+ WebElement div5 = containsDivs.get(5); + String slash = "\\\\"+"\\\\"; // after escaped by the java compiler: "\\\\" -- will become a \ after escaped by the css parser + String quote = "\\"+"\""; // after escaped by the java compiler: "\"" -- will become a " after escaped by the css parser + // TODO jQuery's quote escaping is messy! + assertThat(CssSelectorMatcherService.elementMatchesStringSelector(driver, div5, ":contains(a"+ slash + quote + "b\\)c)"), is(true)); // should be true?? + assertThat(CssSelectorMatcherService.elementMatchesStringSelector(driver, div5, ":contains('a"+ slash + "\"b)c')"), is(true)); // ?? + assertThat(CssSelectorMatcherService.elementMatchesStringSelector(driver, div5, ":contains(\"a"+ slash + quote + "b)c\")"), is(true)); // ?? + } + + // :first-child + @Test + public void first_child() { + WebElement onlyChild = driver.findElement(By.id("onlyChild")); + WebElement grandsonWithSiblings = driver.findElement(By.id("grandsonWithSiblings")); + WebElement brazilian_p = driver.findElement(By.id("brazilian-p")); + WebElement hero_combo = driver.findElement(By.id("hero-combo")); + WebElement htmlElement = driver.findElement(By.cssSelector("html")); + WebElement headElement = driver.findElement(By.cssSelector("head")); + WebElement bodyElement = driver.findElement(By.cssSelector("body")); + + String selector = ":first-child"; + + assertThat(CssSelectorMatcherService.elementMatchesStringSelector(driver, onlyChild, selector), is(true)); + assertThat(CssSelectorMatcherService.elementMatchesStringSelector(driver, grandsonWithSiblings, selector), is(true)); + assertThat(CssSelectorMatcherService.elementMatchesStringSelector(driver, brazilian_p, selector), is(true)); + assertThat(CssSelectorMatcherService.elementMatchesStringSelector(driver, hero_combo, selector), is(false)); + + assertThat(CssSelectorMatcherService.elementMatchesStringSelector(driver, htmlElement, selector), is(false)); + assertThat(CssSelectorMatcherService.elementMatchesStringSelector(driver, headElement, selector), is(true)); + assertThat(CssSelectorMatcherService.elementMatchesStringSelector(driver, bodyElement, selector), is(false)); + } + + // :present + @Test + public void present() { + WebElement onlyChild = driver.findElement(By.id("onlyChild")); + + assertThat(CssSelectorMatcherService.elementMatchesStringSelector(driver, onlyChild, ":present"), is(true)); + assertThat(CssSelectorMatcherService.elementMatchesStringSelector(driver, onlyChild, ":not(:present)"), is(false)); + } + + // :eq() + @Test + public void eq() { + WebElement brazilian_p = driver.findElement(By.id("brazilian-p")); + WebElement french_p = driver.findElement(By.id("french-p")); + + assertThat(CssSelectorMatcherService.elementMatchesStringSelector(driver, brazilian_p, "p:eq(0)"), is(true)); + assertThat(CssSelectorMatcherService.elementMatchesStringSelector(driver, brazilian_p, ":eq(0)"), is(false)); + assertThat(CssSelectorMatcherService.elementMatchesStringSelector(driver, french_p, "p:eq(1)"), is(true)); + assertThat(CssSelectorMatcherService.elementMatchesStringSelector(driver, french_p, ":eq(1)"), is(false)); + + WebElement xidv = driver.findElement(By.id("xidv")); + assertThat(CssSelectorMatcherService.elementMatchesStringSelector(driver, xidv, ".ball.div:eq(1)"), is(false)); + assertThat(CssSelectorMatcherService.elementMatchesStringSelector(driver, xidv, ".div:eq(1).ball"), is(true)); + assertThat(CssSelectorMatcherService.elementMatchesStringSelector(driver, xidv, ".div.ball:eq(1)"), is(false)); + assertThat(CssSelectorMatcherService.elementMatchesStringSelector(driver, xidv, ".div.ball:eq(0)"), is(true)); + + } + +} \ No newline at end of file diff --git a/src/test/java/io/github/seleniumquery/selector/conditionals/pseudoclasses/ContainsPseudoClass2Test.html b/src/test/java/integration/selectors/pseudoclasses/content/ContainsPseudoClass2Test.html similarity index 100% rename from src/test/java/io/github/seleniumquery/selector/conditionals/pseudoclasses/ContainsPseudoClass2Test.html rename to src/test/java/integration/selectors/pseudoclasses/content/ContainsPseudoClass2Test.html diff --git a/src/test/java/io/github/seleniumquery/selector/conditionals/pseudoclasses/ContainsPseudoClass2Test.java b/src/test/java/integration/selectors/pseudoclasses/content/ContainsPseudoClass2Test.java similarity index 90% rename from src/test/java/io/github/seleniumquery/selector/conditionals/pseudoclasses/ContainsPseudoClass2Test.java rename to src/test/java/integration/selectors/pseudoclasses/content/ContainsPseudoClass2Test.java index 49822386..dfd0fef0 100644 --- a/src/test/java/io/github/seleniumquery/selector/conditionals/pseudoclasses/ContainsPseudoClass2Test.java +++ b/src/test/java/integration/selectors/pseudoclasses/content/ContainsPseudoClass2Test.java @@ -1,89 +1,90 @@ -package io.github.seleniumquery.by.evaluator.conditionals.pseudoclasses; - -import static io.github.seleniumquery.SeleniumQuery.$; -import static org.hamcrest.Matchers.is; -import static org.junit.Assert.assertThat; -import io.github.seleniumquery.SetUpAndTearDownDriver; - -import org.junit.Rule; -import org.junit.Test; - -public class ContainsPseudoClass2Test { - - @Rule - public SetUpAndTearDownDriver setUpAndTearDownDriverRule = new SetUpAndTearDownDriver(); - - // http://jsbin.com/tapol/6/edit - @Test - public void containsPseudo() { - assertThat($("div").size(), is(38)); - assertThat($("div:contains(abc)").size(), is(12)); - assertThat($("div:contains(\"abc\")").size(), is(12)); - assertThat($("div:contains('abc')").size(), is(12)); - } - @Test - public void containsPseudo2() { - assertThat($("div:contains('\"abc\"')").size(), is(4)); - assertThat($("#d5").is("div:contains('\"abc\"')"), is(true)); - } - @Test - public void containsPseudo23() { - assertThat($("div:contains(\"'abc'\")").size(), is(4)); - assertThat($("#d9").is("div:contains(\"'abc'\")"), is(true)); - } -// @Test - public void containsPseudo24() { - assertThat($("div:contains(\"\\\"abc\\\"\")").size(), is(0)); - assertThat($("div:contains('\\'abc\\'')").size(), is(0)); - } -// @Test - public void containsPseudo25() { - assertThat($("div:contains(\"a\\\"bc\")").size(), is(0)); - assertThat($("div:contains('a\"bc')").size(), is(4)); - assertThat($("#d12").is("div:contains('a\"bc')"), is(true)); - } - @Test - public void containsPseudo26() { - assertThat($("div:contains(\"a'bc\")").size(), is(4)); - assertThat($("#d16").is("div:contains(\"a'bc\")"), is(true)); - } - @Test - public void containsPseudo27() { - assertThat($("div:contains('a\\'bc')").size(), is(4));// not in jsbin - assertThat($("#d16").is("div:contains('a\\'bc')"), is(true)); // not in jsbin -// assertThat($("div:contains('a\'bc')").size(), is(4)); -// assertThat($("#d16").is("div:contains('a\\'bc')"), is(false)); -// assertThat($("#d16").is("div:contains('a\'bc')"), is(true)); -// assertThat($("#d16").is("div:contains('a'bc')"), is(true)); - } - @Test - public void containsPseudo28() { - assertThat($("div:contains(\"ab)c\")").size(), is(4)); - assertThat($("#d20").is("div:contains(\"ab)c\")"), is(true)); - assertThat($("div:contains('ab)c')").size(), is(4)); - assertThat($("#d20").is("div:contains(\"ab)c\")"), is(true)); - } - @Test - public void containsPseudo29() { - assertThat($("div:contains('a\"b)c')").size(), is(4)); - assertThat($("#d24").is("div:contains('a\"b)c')"), is(true)); - } - @Test - public void containsPseudo30() { - assertThat($("div:contains(\"a'b)c\")").size(), is(4)); - assertThat($("#d28").is("div:contains(\"a'b)c\")"), is(true)); - } -// @Test - public void containsPseudo31() { - assertThat($("div:contains('a\\'b)c')").size(), is(2)); - assertThat($("#d32").is("div:contains('a\\'b)c')"), is(true)); - assertThat($("#d33").is("div:contains('a\\'b)c')"), is(true)); - } -// @Test - public void containsPseudo32() { - assertThat($("div:contains(\"a\\\"b)c\")").size(), is(2)); - assertThat($("#d34").is("div:contains(\"a\\\"b)c\")"), is(true)); - assertThat($("#d35").is("div:contains(\"a\\\"b)c\")"), is(true)); - } - +package integration.selectors.pseudoclasses.content; + +import infrastructure.junitrule.SetUpAndTearDownDriver; +import org.junit.ClassRule; +import org.junit.Rule; +import org.junit.Test; + +import static io.github.seleniumquery.SeleniumQuery.$; +import static org.hamcrest.Matchers.is; +import static org.junit.Assert.assertThat; + +public class ContainsPseudoClass2Test { + + @ClassRule public static SetUpAndTearDownDriver setUpAndTearDownDriverRule = new SetUpAndTearDownDriver(); + @Rule public SetUpAndTearDownDriver setUpAndTearDownDriverRuleInstance = setUpAndTearDownDriverRule; + + // http://jsbin.com/tapol/6/edit + @Test + public void containsPseudo() { + assertThat($("div").size(), is(38)); + assertThat($("div:contains(abc)").size(), is(12)); + assertThat($("div:contains(\"abc\")").size(), is(12)); + assertThat($("div:contains('abc')").size(), is(12)); + } + @Test + public void containsPseudo2() { + assertThat($("div:contains('\"abc\"')").size(), is(4)); + assertThat($("#d5").is("div:contains('\"abc\"')"), is(true)); + } + @Test + public void containsPseudo23() { + assertThat($("div:contains(\"'abc'\")").size(), is(4)); + assertThat($("#d9").is("div:contains(\"'abc'\")"), is(true)); + } +// @Test + public void containsPseudo24() { + assertThat($("div:contains(\"\\\"abc\\\"\")").size(), is(0)); + assertThat($("div:contains('\\'abc\\'')").size(), is(0)); + } +// @Test + public void containsPseudo25() { + assertThat($("div:contains(\"a\\\"bc\")").size(), is(0)); + assertThat($("div:contains('a\"bc')").size(), is(4)); + assertThat($("#d12").is("div:contains('a\"bc')"), is(true)); + } + @Test + public void containsPseudo26() { + assertThat($("div:contains(\"a'bc\")").size(), is(4)); + assertThat($("#d16").is("div:contains(\"a'bc\")"), is(true)); + } + @Test + public void containsPseudo27() { + assertThat($("div:contains('a\\'bc')").size(), is(4));// not in jsbin + assertThat($("#d16").is("div:contains('a\\'bc')"), is(true)); // not in jsbin +// assertThat($("div:contains('a\'bc')").size(), is(4)); +// assertThat($("#d16").is("div:contains('a\\'bc')"), is(false)); +// assertThat($("#d16").is("div:contains('a\'bc')"), is(true)); +// assertThat($("#d16").is("div:contains('a'bc')"), is(true)); + } + @Test + public void containsPseudo28() { + assertThat($("div:contains(\"ab)c\")").size(), is(4)); + assertThat($("#d20").is("div:contains(\"ab)c\")"), is(true)); + assertThat($("div:contains('ab)c')").size(), is(4)); + assertThat($("#d20").is("div:contains(\"ab)c\")"), is(true)); + } + @Test + public void containsPseudo29() { + assertThat($("div:contains('a\"b)c')").size(), is(4)); + assertThat($("#d24").is("div:contains('a\"b)c')"), is(true)); + } + @Test + public void containsPseudo30() { + assertThat($("div:contains(\"a'b)c\")").size(), is(4)); + assertThat($("#d28").is("div:contains(\"a'b)c\")"), is(true)); + } +// @Test + public void containsPseudo31() { + assertThat($("div:contains('a\\'b)c')").size(), is(2)); + assertThat($("#d32").is("div:contains('a\\'b)c')"), is(true)); + assertThat($("#d33").is("div:contains('a\\'b)c')"), is(true)); + } +// @Test + public void containsPseudo32() { + assertThat($("div:contains(\"a\\\"b)c\")").size(), is(2)); + assertThat($("#d34").is("div:contains(\"a\\\"b)c\")"), is(true)); + assertThat($("#d35").is("div:contains(\"a\\\"b)c\")"), is(true)); + } + } \ No newline at end of file diff --git a/src/test/java/io/github/seleniumquery/selector/conditionals/pseudoclasses/ContainsPseudoClassTest.html b/src/test/java/integration/selectors/pseudoclasses/content/ContainsPseudoClassTest.html similarity index 100% rename from src/test/java/io/github/seleniumquery/selector/conditionals/pseudoclasses/ContainsPseudoClassTest.html rename to src/test/java/integration/selectors/pseudoclasses/content/ContainsPseudoClassTest.html diff --git a/src/test/java/integration/selectors/pseudoclasses/content/ContainsPseudoClassTest.java b/src/test/java/integration/selectors/pseudoclasses/content/ContainsPseudoClassTest.java new file mode 100644 index 00000000..25fae124 --- /dev/null +++ b/src/test/java/integration/selectors/pseudoclasses/content/ContainsPseudoClassTest.java @@ -0,0 +1,66 @@ +package integration.selectors.pseudoclasses.content; + +import static io.github.seleniumquery.SeleniumQuery.$; +import static org.hamcrest.Matchers.is; +import static org.junit.Assert.assertThat; +import infrastructure.junitrule.SetUpAndTearDownDriver; + +import org.junit.ClassRule; +import org.junit.Rule; +import org.junit.Test; + +public class ContainsPseudoClassTest { + + @ClassRule public static SetUpAndTearDownDriver setUpAndTearDownDriverRule = new SetUpAndTearDownDriver(); + @Rule public SetUpAndTearDownDriver setUpAndTearDownDriverRuleInstance = setUpAndTearDownDriverRule; + + // http://jsbin.com/siwapeqe/1/edit + @Test + public void contains_pseudo_with_tag() { + assertThat($("div").size(), is(36)); + + assertThat($("div:contains(abc)").size(), is(12)); + assertThat($("div:contains(\"abc\")").size(), is(12)); + assertThat($("div:contains('abc')").size(), is(12)); + + assertThat($("div:contains(\"'abc'\")").size(), is(4)); + assertThat($("div:contains('\"abc\"')").size(), is(4)); + + assertThat($("div:contains(\"a'bc\")").size(), is(4)); + assertThat($("div:contains('a\"bc')").size(), is(4)); + + assertThat($("div:contains(\"ab)c\")").size(), is(4)); + assertThat($("div:contains('ab)c')").size(), is(4)); + + assertThat($("div:contains(\"a'b)c\")").size(), is(4)); + assertThat($("div:contains('a\"b)c')").size(), is(4)); + } + + @Test + public void contains_pseudo_with_tag_escaping_double_quotes_inside_double_quotes_string() { + assertThat($("div:contains(\"a\\\"b)c\")").size(), is(4)); //2?? 4?? who knows!!! + assertThat($("div:contains(\"a\\\\\\\"b)c\")").size(), is(2)); //2?? 4?? who knows!!! + } + + @Test + public void contains_pseudo_with_tag_escaping_single_quote_inside_single_quote_string() { + // the selectors below should return TWO divs, not FOUR, it is matching WRONGLY + // it should match the
a\'b)c
, like jQuery does, but it doesnt + // as the content of contains reaches the ContainsPseudoClass as a'b)c, whereas + // jQuery considers it to be a\'b)c. + // + // To me, the CSS parser does the right thing, but jQuery disagrees. + // There's not much we can do here without changing the CSS Parser... + assertThat($("div:contains('a\\'b)c')").size(), is(4)); + assertThat($("div:contains('a\\\'b)c')").size(), is(4)); + } + + @Test + public void containsPseudo() { + assertThat($("div:contains(abc)").size(), is(12)); + assertThat($("body:contains(abc)").size(), is(1)); + assertThat($("html:contains(abc)").size(), is(1)); + assertThat($(":contains(abc)").size(), is(14)); + } + +} \ No newline at end of file diff --git a/src/test/java/io/github/seleniumquery/selector/conditionals/pseudoclasses/ContainsSelectorTest.html b/src/test/java/integration/selectors/pseudoclasses/content/ContainsSelectorTest.html similarity index 92% rename from src/test/java/io/github/seleniumquery/selector/conditionals/pseudoclasses/ContainsSelectorTest.html rename to src/test/java/integration/selectors/pseudoclasses/content/ContainsSelectorTest.html index 0b0c30e0..84a0b2ea 100644 --- a/src/test/java/io/github/seleniumquery/selector/conditionals/pseudoclasses/ContainsSelectorTest.html +++ b/src/test/java/integration/selectors/pseudoclasses/content/ContainsSelectorTest.html @@ -1,62 +1,62 @@ - - - - -seleniumQuery :contains() selector test page - - -
abc
-
abc
-
-
abc
-
- -
"abc"
-
"abc"
-
-
"abc"
-
-
'abc'
-
'abc'
-
-
'abc'
-
- -
a"bc
-
a"bc
-
-
a"bc
-
- -
a'bc
-
a'bc
-
-
a'bc
-
- -
ab)c
-
ab)c
-
-
ab)c
-
- -
a"b)c
-
a"b)c
-
-
a"b)c
-
- -
a'b)c
-
a'b)c
-
-
a'b)c
-
- -
-
a\'b)c
-
-
-
a\"b)c
-
- + + + + +seleniumQuery :contains() selector test page + + +
abc
+
abc
+
+
abc
+
+ +
"abc"
+
"abc"
+
+
"abc"
+
+
'abc'
+
'abc'
+
+
'abc'
+
+ +
a"bc
+
a"bc
+
+
a"bc
+
+ +
a'bc
+
a'bc
+
+
a'bc
+
+ +
ab)c
+
ab)c
+
+
ab)c
+
+ +
a"b)c
+
a"b)c
+
+
a"b)c
+
+ +
a'b)c
+
a'b)c
+
+
a'b)c
+
+ +
+
a\'b)c
+
+
+
a\"b)c
+
+ \ No newline at end of file diff --git a/src/test/java/io/github/seleniumquery/selector/conditionals/pseudoclasses/ContainsSelectorTest.java b/src/test/java/integration/selectors/pseudoclasses/content/ContainsSelectorTest.java similarity index 83% rename from src/test/java/io/github/seleniumquery/selector/conditionals/pseudoclasses/ContainsSelectorTest.java rename to src/test/java/integration/selectors/pseudoclasses/content/ContainsSelectorTest.java index 3215b3e4..9f7b39a9 100644 --- a/src/test/java/io/github/seleniumquery/selector/conditionals/pseudoclasses/ContainsSelectorTest.java +++ b/src/test/java/integration/selectors/pseudoclasses/content/ContainsSelectorTest.java @@ -1,57 +1,58 @@ -package io.github.seleniumquery.by.evaluator.conditionals.pseudoclasses; - -import static io.github.seleniumquery.SeleniumQuery.$; -import static org.hamcrest.Matchers.is; -import static org.junit.Assert.assertThat; -import io.github.seleniumquery.SetUpAndTearDownDriver; - -import org.junit.Rule; -import org.junit.Test; - -public class ContainsSelectorTest { - - @Rule - public SetUpAndTearDownDriver setUpAndTearDownDriverRule = new SetUpAndTearDownDriver(); - - // http://jsbin.com/siwapeqe/1/edit - @Test - public void contains_pseudo() { - assertThat($("div").size(), is(36)); - - assertThat($("div:contains(abc)").size(), is(12)); - assertThat($("div:contains(\"abc\")").size(), is(12)); - assertThat($("div:contains('abc')").size(), is(12)); - - assertThat($("div:contains(\"'abc'\")").size(), is(4)); - assertThat($("div:contains('\"abc\"')").size(), is(4)); - - assertThat($("div:contains(\"a'bc\")").size(), is(4)); - assertThat($("div:contains('a\"bc')").size(), is(4)); - - assertThat($("div:contains(\"ab)c\")").size(), is(4)); - assertThat($("div:contains('ab)c')").size(), is(4)); - - assertThat($("div:contains(\"a'b)c\")").size(), is(4)); - assertThat($("div:contains('a\"b)c')").size(), is(4)); - - assertThat($("div:contains(\"a\\\"b)c\")").size(), is(4)); // 2? or 4?? - } - - @Test - public void contains_pseudo_jquery_escape_disagreement() { - // I think this should return 4, but jQuery said it was 2 - // its another chapter from the escaping-problem - // leaving it as it is now - // TODO escaping contains - assertThat($("div:contains('a\\'b)c')").size(), is(4)); - } - - @Test - public void contains_pseudo_alone() { - assertThat($("div:contains(abc)").size(), is(12)); - assertThat($("body:contains(abc)").size(), is(1)); - assertThat($("html:contains(abc)").size(), is(1)); - assertThat($(":contains(abc)").size(), is(14)); - } - +package integration.selectors.pseudoclasses.content; + +import infrastructure.junitrule.SetUpAndTearDownDriver; +import org.junit.ClassRule; +import org.junit.Rule; +import org.junit.Test; + +import static io.github.seleniumquery.SeleniumQuery.$; +import static org.hamcrest.Matchers.is; +import static org.junit.Assert.assertThat; + +public class ContainsSelectorTest { + + @ClassRule public static SetUpAndTearDownDriver setUpAndTearDownDriverRule = new SetUpAndTearDownDriver(); + @Rule public SetUpAndTearDownDriver setUpAndTearDownDriverRuleInstance = setUpAndTearDownDriverRule; + + // http://jsbin.com/siwapeqe/1/edit + @Test + public void contains_pseudo() { + assertThat($("div").size(), is(36)); + + assertThat($("div:contains(abc)").size(), is(12)); + assertThat($("div:contains(\"abc\")").size(), is(12)); + assertThat($("div:contains('abc')").size(), is(12)); + + assertThat($("div:contains(\"'abc'\")").size(), is(4)); + assertThat($("div:contains('\"abc\"')").size(), is(4)); + + assertThat($("div:contains(\"a'bc\")").size(), is(4)); + assertThat($("div:contains('a\"bc')").size(), is(4)); + + assertThat($("div:contains(\"ab)c\")").size(), is(4)); + assertThat($("div:contains('ab)c')").size(), is(4)); + + assertThat($("div:contains(\"a'b)c\")").size(), is(4)); + assertThat($("div:contains('a\"b)c')").size(), is(4)); + + assertThat($("div:contains(\"a\\\"b)c\")").size(), is(4)); // 2? or 4?? + } + + @Test + public void contains_pseudo_jquery_escape_disagreement() { + // I think this should return 4, but jQuery said it was 2 + // its another chapter from the escaping-problem + // leaving it as it is now + // TODO escaping contains + assertThat($("div:contains('a\\'b)c')").size(), is(4)); + } + + @Test + public void contains_pseudo_alone() { + assertThat($("div:contains(abc)").size(), is(12)); + assertThat($("body:contains(abc)").size(), is(1)); + assertThat($("html:contains(abc)").size(), is(1)); + assertThat($(":contains(abc)").size(), is(14)); + } + } \ No newline at end of file diff --git a/src/test/java/integration/selectors/pseudoclasses/content/EmptyPseudoClassTest.html b/src/test/java/integration/selectors/pseudoclasses/content/EmptyPseudoClassTest.html new file mode 100644 index 00000000..916e9925 --- /dev/null +++ b/src/test/java/integration/selectors/pseudoclasses/content/EmptyPseudoClassTest.html @@ -0,0 +1,17 @@ + + + + +seleniumQuery :empty test page + + +
a
+
+
+
+
b
+
+
+ + + \ No newline at end of file diff --git a/src/test/java/integration/selectors/pseudoclasses/content/EmptyPseudoClassTest.java b/src/test/java/integration/selectors/pseudoclasses/content/EmptyPseudoClassTest.java new file mode 100644 index 00000000..38735a03 --- /dev/null +++ b/src/test/java/integration/selectors/pseudoclasses/content/EmptyPseudoClassTest.java @@ -0,0 +1,44 @@ +package integration.selectors.pseudoclasses.content; + +import infrastructure.junitrule.SetUpAndTearDownDriver; +import org.junit.Rule; +import org.junit.Test; + +import static io.github.seleniumquery.SeleniumQuery.$; +import static io.github.seleniumquery.by.DriverVersionUtils.isHtmlUnitDriverEmulatingIEBelow11; +import static org.hamcrest.Matchers.is; +import static org.junit.Assert.assertThat; + +public class EmptyPseudoClassTest { + + @Rule + public SetUpAndTearDownDriver setUpAndTearDownDriverRule = new SetUpAndTearDownDriver(getClass()); + + // http://jsbin.com/fuzuj/1/edit + @Test + public void emptyPseudoClass() { + assertThat($("#d1").is(":empty"), is(false)); + assertThat($("#d2").is(":empty"), is(true)); + + if (isHtmlUnitDriverEmulatingIEBelow11($.driver().get())) { + assertThat($("#d3").is(":empty"), is(true)); + assertThat($("#d4").is(":empty"), is(true)); + } else { + assertThat($("#d3").is(":empty"), is(false)); + assertThat($("#d4").is(":empty"), is(false)); + } + assertThat($("#d5").is(":empty"), is(false)); + + assertThat($("#d10").is(":empty"), is(false)); + assertThat($("#d11").is(":empty"), is(true)); + assertThat($("#d12").is(":empty"), is(false)); + assertThat($("#d13").is(":empty"), is(true)); + + if (isHtmlUnitDriverEmulatingIEBelow11($.driver().get())) { + assertThat($("#d14").is(":empty"), is(true)); + } else { + assertThat($("#d14").is(":empty"), is(false)); + } + } + +} \ No newline at end of file diff --git a/src/test/java/io/github/seleniumquery/selector/conditionals/pseudoclasses/HasPseudoClassTest.html b/src/test/java/integration/selectors/pseudoclasses/content/HasPseudoClassTest.html similarity index 100% rename from src/test/java/io/github/seleniumquery/selector/conditionals/pseudoclasses/HasPseudoClassTest.html rename to src/test/java/integration/selectors/pseudoclasses/content/HasPseudoClassTest.html diff --git a/src/test/java/io/github/seleniumquery/selector/conditionals/pseudoclasses/HasPseudoClassTest.java b/src/test/java/integration/selectors/pseudoclasses/content/HasPseudoClassTest.java similarity index 77% rename from src/test/java/io/github/seleniumquery/selector/conditionals/pseudoclasses/HasPseudoClassTest.java rename to src/test/java/integration/selectors/pseudoclasses/content/HasPseudoClassTest.java index 0cdba17c..c1bc6e01 100644 --- a/src/test/java/io/github/seleniumquery/selector/conditionals/pseudoclasses/HasPseudoClassTest.java +++ b/src/test/java/integration/selectors/pseudoclasses/content/HasPseudoClassTest.java @@ -1,26 +1,26 @@ -package io.github.seleniumquery.by.evaluator.conditionals.pseudoclasses; - -import static io.github.seleniumquery.SeleniumQuery.$; -import static org.hamcrest.Matchers.is; -import static org.junit.Assert.assertThat; -import io.github.seleniumquery.SetUpAndTearDownDriver; - -import org.junit.Rule; -import org.junit.Test; - -public class HasPseudoClassTest { - - @Rule - public SetUpAndTearDownDriver setUpAndTearDownDriverRule = new SetUpAndTearDownDriver(); - - @Test - public void hasPseudoClass() { - assertThat($("div").size(), is(4)); - assertThat($("div:has(p)").size(), is(1)); - assertThat($("div:contains(qwea)").size(), is(1)); - assertThat($("div:has(:contains('a\"b'))").size(), is(1)); - assertThat($("div:has(h1)").size(), is(1)); - assertThat($("div:has(h2)").size(), is(0)); - } - +package integration.selectors.pseudoclasses.content; + +import static io.github.seleniumquery.SeleniumQuery.$; +import static org.hamcrest.Matchers.is; +import static org.junit.Assert.assertThat; +import infrastructure.junitrule.SetUpAndTearDownDriver; + +import org.junit.Rule; +import org.junit.Test; + +public class HasPseudoClassTest { + + @Rule + public SetUpAndTearDownDriver setUpAndTearDownDriverRule = new SetUpAndTearDownDriver(getClass()); + + @Test + public void hasPseudoClass() { + assertThat($("div").size(), is(4)); + assertThat($("div:has(p)").size(), is(1)); + assertThat($("div:contains(qwea)").size(), is(1)); + assertThat($("div:has(:contains('a\"b'))").size(), is(1)); + assertThat($("div:has(h1)").size(), is(1)); + assertThat($("div:has(h2)").size(), is(0)); + } + } \ No newline at end of file diff --git a/src/test/java/integration/selectors/pseudoclasses/content/ParentPseudoClassTest.html b/src/test/java/integration/selectors/pseudoclasses/content/ParentPseudoClassTest.html new file mode 100644 index 00000000..c49f8435 --- /dev/null +++ b/src/test/java/integration/selectors/pseudoclasses/content/ParentPseudoClassTest.html @@ -0,0 +1,17 @@ + + + + +seleniumQuery :parent test page + + +
a
+
+
+
+
b
+
+
+ + + \ No newline at end of file diff --git a/src/test/java/integration/selectors/pseudoclasses/content/ParentPseudoClassTest.java b/src/test/java/integration/selectors/pseudoclasses/content/ParentPseudoClassTest.java new file mode 100644 index 00000000..46d4811b --- /dev/null +++ b/src/test/java/integration/selectors/pseudoclasses/content/ParentPseudoClassTest.java @@ -0,0 +1,44 @@ +package integration.selectors.pseudoclasses.content; + +import infrastructure.junitrule.SetUpAndTearDownDriver; +import org.junit.Rule; +import org.junit.Test; + +import static io.github.seleniumquery.SeleniumQuery.$; +import static io.github.seleniumquery.by.DriverVersionUtils.isHtmlUnitDriverEmulatingIEBelow11; +import static org.hamcrest.Matchers.is; +import static org.junit.Assert.assertThat; + +public class ParentPseudoClassTest { + + @Rule + public SetUpAndTearDownDriver setUpAndTearDownDriverRule = new SetUpAndTearDownDriver(getClass()); + + // http://jsbin.com/lutim/6/edit + @Test + public void parentPseudoClass() { + assertThat($("#d1").is(":parent"), is(true)); + assertThat($("#d2").is(":parent"), is(false)); + + if (isHtmlUnitDriverEmulatingIEBelow11($.driver().get())) { + assertThat($("#d3").is(":parent"), is(false)); + assertThat($("#d4").is(":parent"), is(false)); + } else { + assertThat($("#d3").is(":parent"), is(true)); + assertThat($("#d4").is(":parent"), is(true)); + } + assertThat($("#d5").is(":parent"), is(true)); + + assertThat($("#d10").is(":parent"), is(true)); + assertThat($("#d11").is(":parent"), is(false)); + assertThat($("#d12").is(":parent"), is(true)); + assertThat($("#d13").is(":parent"), is(false)); + + if (isHtmlUnitDriverEmulatingIEBelow11($.driver().get())) { + assertThat($("#d14").is(":parent"), is(false)); + } else { + assertThat($("#d14").is(":parent"), is(true)); + } + } + +} \ No newline at end of file diff --git a/src/test/java/io/github/seleniumquery/selector/conditionals/pseudoclasses/ButtonPseudoClassTest.html b/src/test/java/integration/selectors/pseudoclasses/form/ButtonPseudoClassTest.html similarity index 100% rename from src/test/java/io/github/seleniumquery/selector/conditionals/pseudoclasses/ButtonPseudoClassTest.html rename to src/test/java/integration/selectors/pseudoclasses/form/ButtonPseudoClassTest.html diff --git a/src/test/java/integration/selectors/pseudoclasses/form/ButtonPseudoClassTest.java b/src/test/java/integration/selectors/pseudoclasses/form/ButtonPseudoClassTest.java new file mode 100644 index 00000000..5e51628c --- /dev/null +++ b/src/test/java/integration/selectors/pseudoclasses/form/ButtonPseudoClassTest.java @@ -0,0 +1,57 @@ +package integration.selectors.pseudoclasses.form; + +import infrastructure.junitrule.SetUpAndTearDownDriver; +import org.junit.ClassRule; +import org.junit.Rule; +import org.junit.Test; + +import static io.github.seleniumquery.SeleniumQuery.$; +import static io.github.seleniumquery.by.DriverVersionUtils.isHtmlUnitDriverEmulatingIEBelow11; +import static org.hamcrest.Matchers.is; +import static org.junit.Assert.assertThat; + +public class ButtonPseudoClassTest { + + @ClassRule public static SetUpAndTearDownDriver setUpAndTearDownDriverRule = new SetUpAndTearDownDriver(); + @Rule public SetUpAndTearDownDriver setUpAndTearDownDriverRuleInstance = setUpAndTearDownDriverRule; + + // http://jsbin.com/yacerelo/1/edit + @Test + public void buttonPseudoClass_selector() { + assertThat($("[type='button']").size(), is(4)); + assertThat($(":button").size(), is(5)); + assertThat($("*:button").size(), is(5)); + assertThat($("input:button").size(), is(1)); + assertThat($("div:button").size(), is(0)); + assertThat($("span:button").size(), is(0)); + } + + @Test + public void buttonPseudoClass_is() { + assertThat($("#i1").is(":button"), is(true)); + assertThat($("#i1").is("*:button"), is(true)); + assertThat($("#i1").is("input:button"), is(true)); + + assertThat($("#i2").is(":button"), is(false)); + assertThat($("#i3").is(":button"), is(false)); + assertThat($("#i4").is(":button"), is(false)); + + assertThat($("#b1").is(":button"), is(true)); + + // #Cross-Driver + // Not a workaround, just documenting a difference. + // Latest HtmlUnit, when emulating IE 8 abd 9, considers to be + // not really a problem here, as it doesn't affect :button's behavior. + // :submit, though, is affected. Check its implementation if you're curious about how it solves this + // problem (and, yes, it is nasty, it uses reflection and stuff). + if (isHtmlUnitDriverEmulatingIEBelow11($.driver().get())) { + assertThat($("#b1").is("[type='button']"), is(true)); + } else { + assertThat($("#b1").is("[type='button']"), is(false)); + } + + assertThat($("#b2").is(":button"), is(true)); + assertThat($("#b2").is("[type='button']"), is(true)); + } + +} \ No newline at end of file diff --git a/src/test/java/io/github/seleniumquery/selector/conditionals/pseudoclasses/CheckboxPseudoClassTest.html b/src/test/java/integration/selectors/pseudoclasses/form/CheckboxPseudoClassTest.html similarity index 96% rename from src/test/java/io/github/seleniumquery/selector/conditionals/pseudoclasses/CheckboxPseudoClassTest.html rename to src/test/java/integration/selectors/pseudoclasses/form/CheckboxPseudoClassTest.html index 160d90ba..157da61a 100644 --- a/src/test/java/io/github/seleniumquery/selector/conditionals/pseudoclasses/CheckboxPseudoClassTest.html +++ b/src/test/java/integration/selectors/pseudoclasses/form/CheckboxPseudoClassTest.html @@ -1,15 +1,15 @@ - - - - - seleniumQuery :checkbox test page - - - - -
checkbox
- checkbox - - - + + + + + seleniumQuery :checkbox test page + + + + +
checkbox
+ checkbox + + + \ No newline at end of file diff --git a/src/test/java/io/github/seleniumquery/selector/conditionals/pseudoclasses/CheckboxPseudoClassTest.java b/src/test/java/integration/selectors/pseudoclasses/form/CheckboxPseudoClassTest.java similarity index 71% rename from src/test/java/io/github/seleniumquery/selector/conditionals/pseudoclasses/CheckboxPseudoClassTest.java rename to src/test/java/integration/selectors/pseudoclasses/form/CheckboxPseudoClassTest.java index 8534fb6d..66bb6bd5 100644 --- a/src/test/java/io/github/seleniumquery/selector/conditionals/pseudoclasses/CheckboxPseudoClassTest.java +++ b/src/test/java/integration/selectors/pseudoclasses/form/CheckboxPseudoClassTest.java @@ -1,34 +1,35 @@ -package io.github.seleniumquery.by.evaluator.conditionals.pseudoclasses; - -import static io.github.seleniumquery.SeleniumQuery.$; -import static org.hamcrest.Matchers.is; -import static org.junit.Assert.assertThat; -import io.github.seleniumquery.SetUpAndTearDownDriver; - -import org.junit.Rule; -import org.junit.Test; - -public class CheckboxPseudoClassTest { - - @Rule - public SetUpAndTearDownDriver setUpAndTearDownDriverRule = new SetUpAndTearDownDriver(); - - @Test - public void checkboxPseudoClass() { - assertThat($("[type='checkbox']").size(), is(4)); - assertThat($(":checkbox").size(), is(1)); - assertThat($("*:checkbox").size(), is(1)); - assertThat($("input:checkbox").size(), is(1)); - assertThat($("div:checkbox").size(), is(0)); - assertThat($("span:checkbox").size(), is(0)); - - assertThat($("#i1").is(":checkbox"), is(true)); - assertThat($("#i1").is("*:checkbox"), is(true)); - assertThat($("#i1").is("input:checkbox"), is(true)); - - assertThat($("#i2").is(":checkbox"), is(false)); - assertThat($("#i3").is(":checkbox"), is(false)); - assertThat($("#i4").is(":checkbox"), is(false)); - } - +package integration.selectors.pseudoclasses.form; + +import static io.github.seleniumquery.SeleniumQuery.$; +import static org.hamcrest.Matchers.is; +import static org.junit.Assert.assertThat; +import infrastructure.junitrule.SetUpAndTearDownDriver; + +import org.junit.ClassRule; +import org.junit.Rule; +import org.junit.Test; + +public class CheckboxPseudoClassTest { + + @ClassRule public static SetUpAndTearDownDriver setUpAndTearDownDriverRule = new SetUpAndTearDownDriver(); + @Rule public SetUpAndTearDownDriver setUpAndTearDownDriverRuleInstance = setUpAndTearDownDriverRule; + + @Test + public void checkboxPseudoClass() { + assertThat($("[type='checkbox']").size(), is(4)); + assertThat($(":checkbox").size(), is(1)); + assertThat($("*:checkbox").size(), is(1)); + assertThat($("input:checkbox").size(), is(1)); + assertThat($("div:checkbox").size(), is(0)); + assertThat($("span:checkbox").size(), is(0)); + + assertThat($("#i1").is(":checkbox"), is(true)); + assertThat($("#i1").is("*:checkbox"), is(true)); + assertThat($("#i1").is("input:checkbox"), is(true)); + + assertThat($("#i2").is(":checkbox"), is(false)); + assertThat($("#i3").is(":checkbox"), is(false)); + assertThat($("#i4").is(":checkbox"), is(false)); + } + } \ No newline at end of file diff --git a/src/test/java/integration/selectors/pseudoclasses/form/CheckedPseudoClassTest.html b/src/test/java/integration/selectors/pseudoclasses/form/CheckedPseudoClassTest.html new file mode 100644 index 00000000..0b55de8f --- /dev/null +++ b/src/test/java/integration/selectors/pseudoclasses/form/CheckedPseudoClassTest.html @@ -0,0 +1,39 @@ + + + + + seleniumQuery :checked test page + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/test/java/integration/selectors/pseudoclasses/form/CheckedPseudoClassTest.java b/src/test/java/integration/selectors/pseudoclasses/form/CheckedPseudoClassTest.java new file mode 100644 index 00000000..d5f81c48 --- /dev/null +++ b/src/test/java/integration/selectors/pseudoclasses/form/CheckedPseudoClassTest.java @@ -0,0 +1,76 @@ +package integration.selectors.pseudoclasses.form; + +import infrastructure.junitrule.SetUpAndTearDownDriver; +import org.junit.ClassRule; +import org.junit.Rule; +import org.junit.Test; + +import static io.github.seleniumquery.SeleniumQuery.$; +import static org.hamcrest.Matchers.is; +import static org.junit.Assert.assertThat; + +/** + * {@link SelectedPseudoClassTest} has some :checked tests as well. + */ +public class CheckedPseudoClassTest { + + @ClassRule public static SetUpAndTearDownDriver setUpAndTearDownDriverRule = new SetUpAndTearDownDriver(); + @Rule public SetUpAndTearDownDriver setUpAndTearDownDriverRuleInstance = setUpAndTearDownDriverRule; + + @Test + public void checkedPseudo() { + assertThat($("*").size(), is(14+7+3+7)); + assertThat($(":checked").size(), is(4+7+7)); + } + + @Test + public void checkedPseudo_with_tag_option() { + assertThat($("option:checked").size(), is(2)); + } + + @Test + public void checkedPseudo_with_tag_input() { + assertThat($("input:checked").size(), is(2+7+7)); + } + + @Test + public void checkedPseudo_with_tag_input_checkbox() { + assertThat($("input[type=checkbox]:checked").size(), is(1+7)); + } + + @Test + public void checkedPseudo_with_tag_input_radio() { + assertThat($("input[type=radio]:checked").size(), is(1+7)); + } + + @Test + public void checked_selector_with_not() { + assertThat($(":not(:checked)").size(), is(10+3)); + } + + @Test + public void checked_selector_with_IS() { + assertThat($("#chk1").is(":checked"), is(true)); + assertThat($("#chk2").is(":checked"), is(false)); + + assertThat($("#rad1").is(":checked"), is(true)); + assertThat($("#rad2").is(":checked"), is(false)); + + assertThat($("#opt1").is(":checked"), is(true)); + assertThat($("#opt2").is(":checked"), is(false)); + + assertThat($("#nc1").is(":checked"), is(false)); + assertThat($("#nc2").is(":checked"), is(false)); + assertThat($("#nc3").is(":checked"), is(false)); + + assertThat($(".c[type=checkbox]").is(":checked"), is(true)); + assertThat($(".c[type=radio]").is(":checked"), is(true)); + } + + @Test + public void checkedPseudo__must_be_aware_of_input_type_but_not_checked_value() { + assertThat($(".c").size(), is(17)); + assertThat($(".c:checked").size(), is(14)); + } + +} \ No newline at end of file diff --git a/src/test/java/io/github/seleniumquery/selector/conditionals/pseudoclasses/DisabledPseudoClassTest.html b/src/test/java/integration/selectors/pseudoclasses/form/DisabledPseudoClassTest.html similarity index 91% rename from src/test/java/io/github/seleniumquery/selector/conditionals/pseudoclasses/DisabledPseudoClassTest.html rename to src/test/java/integration/selectors/pseudoclasses/form/DisabledPseudoClassTest.html index 85a838ee..09f295ee 100644 --- a/src/test/java/io/github/seleniumquery/selector/conditionals/pseudoclasses/DisabledPseudoClassTest.html +++ b/src/test/java/integration/selectors/pseudoclasses/form/DisabledPseudoClassTest.html @@ -1,165 +1,165 @@ - - - - -seleniumQuery :disabled test page - - -
- - - -
- - - -
- - - - - - -
- - - -
- - - -
- - - -
- - - -
- - - -
- - - -
- - - -
- - - -
- - - -
- - - -
- - - - - - -
- - - -
- - - -
- - - -
- - - -
- - - - - - -
- - - -
- - - -
- - - -
- - - - - -
- - - -
- + + + + +seleniumQuery :disabled test page + + +
+ + + +
+ + + +
+ + + + + + +
+ + + +
+ + + +
+ + + +
+ + + +
+ + + +
+ + + +
+ + + +
+ + + +
+ + + +
+ + + +
+ + + + + + +
+ + + +
+ + + +
+ + + +
+ + + +
+ + + + + + +
+ + + +
+ + + +
+ + + +
+ + + + + +
+ + + +
+ \ No newline at end of file diff --git a/src/test/java/integration/selectors/pseudoclasses/form/DisabledPseudoClassTest.java b/src/test/java/integration/selectors/pseudoclasses/form/DisabledPseudoClassTest.java new file mode 100644 index 00000000..699c15bf --- /dev/null +++ b/src/test/java/integration/selectors/pseudoclasses/form/DisabledPseudoClassTest.java @@ -0,0 +1,54 @@ +package integration.selectors.pseudoclasses.form; + +import infrastructure.junitrule.SetUpAndTearDownDriver; +import org.junit.ClassRule; +import org.junit.Rule; +import org.junit.Test; + +import static infrastructure.IntegrationTestUtils.t; +import static io.github.seleniumquery.SeleniumQuery.$; +import static org.hamcrest.Matchers.is; +import static org.junit.Assert.assertThat; + +public class DisabledPseudoClassTest { + + @ClassRule public static SetUpAndTearDownDriver setUpAndTearDownDriverRule = new SetUpAndTearDownDriver(); + @Rule public SetUpAndTearDownDriver setUpAndTearDownDriverRuleInstance = setUpAndTearDownDriverRule; + + // http://jsbin.com/guqef/3/edit + @Test + public void disabledPseudo_with_tag_button() { + assertThat($("button:disabled").size(), is(2)); + } + + @Test + public void disabledPseudo_with_tag_input() { + assertThat($("input:disabled").size(), is(48)); + } + + @Test + public void disabledPseudo_with_tag_select() { + assertThat($("select:disabled").size(), is(2)); + } + + @Test + public void disabledPseudo_with_tag_option() { + assertThat($("option:disabled").size(), is(24)); + } + + @Test + public void disabledPseudo_with_tag_optgroup() { + t(":disabled s", "optgroup:disabled", "optgroup-2", "optgroup-3", "optgroup-5", "optgroup-6", "optgroup-8", "optgroup-9"); + } + + @Test + public void disabledPseudo_with_tag_textarea() { + assertThat($("textarea:disabled").size(), is(2)); + } + + @Test + public void disabledPseudo() { + assertThat($(":disabled").size(), is(84)); + } + +} \ No newline at end of file diff --git a/src/test/java/io/github/seleniumquery/selector/conditionals/pseudoclasses/DisabledSelectorTest.html b/src/test/java/integration/selectors/pseudoclasses/form/DisabledSelectorTest.html similarity index 94% rename from src/test/java/io/github/seleniumquery/selector/conditionals/pseudoclasses/DisabledSelectorTest.html rename to src/test/java/integration/selectors/pseudoclasses/form/DisabledSelectorTest.html index 15427810..98031889 100644 --- a/src/test/java/io/github/seleniumquery/selector/conditionals/pseudoclasses/DisabledSelectorTest.html +++ b/src/test/java/integration/selectors/pseudoclasses/form/DisabledSelectorTest.html @@ -1,42 +1,44 @@ - - - - - seleniumQuery :enabled test page - - - - - - - - - - - - - - - - - - - - - - - - + + + + + seleniumQuery :enabled test page + + +
divs arent disableable
+ + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/test/java/io/github/seleniumquery/selector/conditionals/pseudoclasses/DisabledSelectorTest.java b/src/test/java/integration/selectors/pseudoclasses/form/DisabledSelectorTest.java similarity index 61% rename from src/test/java/io/github/seleniumquery/selector/conditionals/pseudoclasses/DisabledSelectorTest.java rename to src/test/java/integration/selectors/pseudoclasses/form/DisabledSelectorTest.java index c722b0b9..0ace2761 100644 --- a/src/test/java/io/github/seleniumquery/selector/conditionals/pseudoclasses/DisabledSelectorTest.java +++ b/src/test/java/integration/selectors/pseudoclasses/form/DisabledSelectorTest.java @@ -1,35 +1,36 @@ -package io.github.seleniumquery.by.evaluator.conditionals.pseudoclasses; - -import static io.github.seleniumquery.SeleniumQuery.$; -import static org.hamcrest.Matchers.is; -import static org.junit.Assert.assertThat; -import io.github.seleniumquery.SetUpAndTearDownDriver; - -import org.junit.Rule; -import org.junit.Test; - -public class DisabledSelectorTest { - - @Rule - public SetUpAndTearDownDriver setUpAndTearDownDriverRule = new SetUpAndTearDownDriver(); - - @Test - public void disabled_selector() { - assertThat($("*").size(), is(27)); - assertThat($(":disabled").size(), is(8)); - } - - @Test - public void disabled_selector_with_not() { - assertThat($(":not(:disabled)").size(), is(19)); - } - - @Test - public void disabled_selector_with_IS() { - assertThat($("#enabledInput").is(":disabled"), is(false)); - assertThat($("#disabledInput").is(":disabled"), is(true)); - assertThat($("#enabledTextArea").is(":disabled"), is(false)); - assertThat($("#disabledTextArea").is(":disabled"), is(true)); - } - +package integration.selectors.pseudoclasses.form; + +import static io.github.seleniumquery.SeleniumQuery.$; +import static org.hamcrest.Matchers.is; +import static org.junit.Assert.assertThat; +import infrastructure.junitrule.SetUpAndTearDownDriver; + +import org.junit.ClassRule; +import org.junit.Rule; +import org.junit.Test; + +public class DisabledSelectorTest { + + @ClassRule public static SetUpAndTearDownDriver setUpAndTearDownDriverRule = new SetUpAndTearDownDriver(); + @Rule public SetUpAndTearDownDriver setUpAndTearDownDriverRuleInstance = setUpAndTearDownDriverRule; + + @Test + public void disabled_selector() { + assertThat($("*").size(), is(28)); + assertThat($(":disabled").size(), is(8)); + } + + @Test + public void disabled_selector_with_not() { + assertThat($(":not(:disabled)").size(), is(20)); + } + + @Test + public void disabled_selector_with_IS() { + assertThat($("#enabledInput").is(":disabled"), is(false)); + assertThat($("#disabledInput").is(":disabled"), is(true)); + assertThat($("#enabledTextArea").is(":disabled"), is(false)); + assertThat($("#disabledTextArea").is(":disabled"), is(true)); + } + } \ No newline at end of file diff --git a/src/test/java/io/github/seleniumquery/selector/conditionals/pseudoclasses/EnabledPseudoClassTest.html b/src/test/java/integration/selectors/pseudoclasses/form/EnabledPseudoClassTest.html similarity index 94% rename from src/test/java/io/github/seleniumquery/selector/conditionals/pseudoclasses/EnabledPseudoClassTest.html rename to src/test/java/integration/selectors/pseudoclasses/form/EnabledPseudoClassTest.html index 6a42e1b7..7ac6a309 100644 --- a/src/test/java/io/github/seleniumquery/selector/conditionals/pseudoclasses/EnabledPseudoClassTest.html +++ b/src/test/java/integration/selectors/pseudoclasses/form/EnabledPseudoClassTest.html @@ -1,165 +1,165 @@ - - - - -seleniumQuery :enabled test page - - -
- - - -
- - - -
- - - - - - -
- - - -
- - - -
- - - -
- - - -
- - - -
- - - -
- - - -
- - - -
- - - -
- - - -
- - - - - - -
- - - -
- - - -
- - - -
- - - -
- - - - - - -
- - - -
- - - -
- - - -
- - - - - -
- - - -
- + + + + +seleniumQuery :enabled test page + + +
+ + + +
+ + + +
+ + + + + + +
+ + + +
+ + + +
+ + + +
+ + + +
+ + + +
+ + + +
+ + + +
+ + + +
+ + + +
+ + + +
+ + + + + + +
+ + + +
+ + + +
+ + + +
+ + + +
+ + + + + + +
+ + + +
+ + + +
+ + + +
+ + + + + +
+ + + +
+ \ No newline at end of file diff --git a/src/test/java/integration/selectors/pseudoclasses/form/EnabledPseudoClassTest.java b/src/test/java/integration/selectors/pseudoclasses/form/EnabledPseudoClassTest.java new file mode 100644 index 00000000..2df8736d --- /dev/null +++ b/src/test/java/integration/selectors/pseudoclasses/form/EnabledPseudoClassTest.java @@ -0,0 +1,59 @@ +package integration.selectors.pseudoclasses.form; + +import static io.github.seleniumquery.SeleniumQuery.$; +import static org.hamcrest.Matchers.is; +import static org.junit.Assert.assertThat; +import infrastructure.junitrule.SetUpAndTearDownDriver; + +import org.junit.ClassRule; +import org.junit.Rule; +import org.junit.Test; + +public class EnabledPseudoClassTest { + + @ClassRule public static SetUpAndTearDownDriver setUpAndTearDownDriverRule = new SetUpAndTearDownDriver(); + @Rule public SetUpAndTearDownDriver setUpAndTearDownDriverRuleInstance = setUpAndTearDownDriverRule; + + @Test + public void enabledPseudo_with_tag_button() { + assertThat($("button:enabled").size(), is(1)); + } + + @Test + public void enabledPseudo_with_tag_input() { + assertThat($("input:enabled").size(), is(24)); + } + + @Test + public void enabledPseudo_with_tag_select() { + assertThat($("select:enabled").size(), is(1)); + } + + @Test + public void enabledPseudo_with_tag_option() { + assertThat($("option:enabled").size(), is(3)); + } + + @Test + public void enabledPseudo_with_tag_optgroup() { + assertThat($("optgroup:enabled").size(), is(3)); + } + + @Test + public void enabledPseudo_with_tag_textarea() { + assertThat($("textarea:enabled").size(), is(1)); + } + + @Test + public void enabledPseudo() { + assertThat($(":enabled").size(), is(33)); + } + + @Test + public void enabledPseudo_with_class() { + assertThat($(".c").size(), is(3)); + assertThat($(".c:enabled").size(), is(1)); + assertThat($(".c:not(:enabled)").size(), is(2)); + } + +} \ No newline at end of file diff --git a/src/test/java/io/github/seleniumquery/selector/conditionals/pseudoclasses/EnabledSelectorTest.html b/src/test/java/integration/selectors/pseudoclasses/form/EnabledSelectorTest.html similarity index 96% rename from src/test/java/io/github/seleniumquery/selector/conditionals/pseudoclasses/EnabledSelectorTest.html rename to src/test/java/integration/selectors/pseudoclasses/form/EnabledSelectorTest.html index 15427810..96f86ceb 100644 --- a/src/test/java/io/github/seleniumquery/selector/conditionals/pseudoclasses/EnabledSelectorTest.html +++ b/src/test/java/integration/selectors/pseudoclasses/form/EnabledSelectorTest.html @@ -1,42 +1,42 @@ - - - - - seleniumQuery :enabled test page - - - - - - - - - - - - - - - - - - - - - - - - + + + + + seleniumQuery :enabled test page + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/test/java/io/github/seleniumquery/selector/conditionals/pseudoclasses/EnabledSelectorTest.java b/src/test/java/integration/selectors/pseudoclasses/form/EnabledSelectorTest.java similarity index 73% rename from src/test/java/io/github/seleniumquery/selector/conditionals/pseudoclasses/EnabledSelectorTest.java rename to src/test/java/integration/selectors/pseudoclasses/form/EnabledSelectorTest.java index d9033eca..c78f17fe 100644 --- a/src/test/java/io/github/seleniumquery/selector/conditionals/pseudoclasses/EnabledSelectorTest.java +++ b/src/test/java/integration/selectors/pseudoclasses/form/EnabledSelectorTest.java @@ -1,40 +1,41 @@ -package io.github.seleniumquery.by.evaluator.conditionals.pseudoclasses; - -import static io.github.seleniumquery.SeleniumQuery.$; -import static org.hamcrest.Matchers.is; -import static org.junit.Assert.assertThat; -import io.github.seleniumquery.SetUpAndTearDownDriver; - -import org.junit.Rule; -import org.junit.Test; - -public class EnabledSelectorTest { - - @Rule - public SetUpAndTearDownDriver setUpAndTearDownDriverRule = new SetUpAndTearDownDriver(); - - @Test - public void enabled_selector() { - assertThat($("*").size(), is(27)); - assertThat($(":enabled").size(), is(14)); - } - - @Test - public void enabled_selector_with_not() { - assertThat($(":not(:enabled)").size(), is(13)); - } - - @Test - public void enabled_selector_with_IS() { - assertThat($("#enabledInput").is(":enabled"), is(true)); - assertThat($("#disabledInput").is(":enabled"), is(false)); - assertThat($("#enabledTextArea").is(":enabled"), is(true)); - assertThat($("#disabledTextArea").is(":enabled"), is(false)); - } - - @Test - public void enabled_selector_with_visible() { - assertThat($("#enabledInput").is(":visible:enabled"), is(true)); - } - +package integration.selectors.pseudoclasses.form; + +import static io.github.seleniumquery.SeleniumQuery.$; +import static org.hamcrest.Matchers.is; +import static org.junit.Assert.assertThat; +import infrastructure.junitrule.SetUpAndTearDownDriver; + +import org.junit.ClassRule; +import org.junit.Rule; +import org.junit.Test; + +public class EnabledSelectorTest { + + @ClassRule public static SetUpAndTearDownDriver setUpAndTearDownDriverRule = new SetUpAndTearDownDriver(); + @Rule public SetUpAndTearDownDriver setUpAndTearDownDriverRuleInstance = setUpAndTearDownDriverRule; + + @Test + public void enabled_selector() { + assertThat($("*").size(), is(27)); + assertThat($(":enabled").size(), is(14)); + } + + @Test + public void enabled_selector_with_not() { + assertThat($(":not(:enabled)").size(), is(13)); + } + + @Test + public void enabled_selector_with_IS() { + assertThat($("#enabledInput").is(":enabled"), is(true)); + assertThat($("#disabledInput").is(":enabled"), is(false)); + assertThat($("#enabledTextArea").is(":enabled"), is(true)); + assertThat($("#disabledTextArea").is(":enabled"), is(false)); + } + + @Test + public void enabled_selector_with_visible() { + assertThat($("#enabledInput").is(":visible:enabled"), is(true)); + } + } \ No newline at end of file diff --git a/src/test/java/io/github/seleniumquery/selector/conditionals/pseudoclasses/FilePseudoClassTest.html b/src/test/java/integration/selectors/pseudoclasses/form/FilePseudoClassTest.html similarity index 95% rename from src/test/java/io/github/seleniumquery/selector/conditionals/pseudoclasses/FilePseudoClassTest.html rename to src/test/java/integration/selectors/pseudoclasses/form/FilePseudoClassTest.html index c9b5843b..ea0b4d75 100644 --- a/src/test/java/io/github/seleniumquery/selector/conditionals/pseudoclasses/FilePseudoClassTest.html +++ b/src/test/java/integration/selectors/pseudoclasses/form/FilePseudoClassTest.html @@ -1,15 +1,15 @@ - - - - - seleniumQuery :file test page - - - - -
file
- file - - - + + + + + seleniumQuery :file test page + + + + +
file
+ file + + + \ No newline at end of file diff --git a/src/test/java/io/github/seleniumquery/selector/conditionals/pseudoclasses/FilePseudoClassTest.java b/src/test/java/integration/selectors/pseudoclasses/form/FilePseudoClassTest.java similarity index 82% rename from src/test/java/io/github/seleniumquery/selector/conditionals/pseudoclasses/FilePseudoClassTest.java rename to src/test/java/integration/selectors/pseudoclasses/form/FilePseudoClassTest.java index 78d2598e..6506ebe0 100644 --- a/src/test/java/io/github/seleniumquery/selector/conditionals/pseudoclasses/FilePseudoClassTest.java +++ b/src/test/java/integration/selectors/pseudoclasses/form/FilePseudoClassTest.java @@ -1,34 +1,34 @@ -package io.github.seleniumquery.by.evaluator.conditionals.pseudoclasses; - -import static io.github.seleniumquery.SeleniumQuery.$; -import static org.hamcrest.Matchers.is; -import static org.junit.Assert.assertThat; -import io.github.seleniumquery.SetUpAndTearDownDriver; - -import org.junit.Rule; -import org.junit.Test; - -public class FilePseudoClassTest { - - @Rule - public SetUpAndTearDownDriver setUpAndTearDownDriverRule = new SetUpAndTearDownDriver(); - - @Test - public void filePseudoClass() { - assertThat($("[type='file']").size(), is(4)); - assertThat($(":file").size(), is(1)); - assertThat($("*:file").size(), is(1)); - assertThat($("input:file").size(), is(1)); - assertThat($("div:file").size(), is(0)); - assertThat($("span:file").size(), is(0)); - - assertThat($("#i1").is(":file"), is(true)); - assertThat($("#i1").is("*:file"), is(true)); - assertThat($("#i1").is("input:file"), is(true)); - - assertThat($("#i2").is(":file"), is(false)); - assertThat($("#i3").is(":file"), is(false)); - assertThat($("#i4").is(":file"), is(false)); - } - +package integration.selectors.pseudoclasses.form; + +import static io.github.seleniumquery.SeleniumQuery.$; +import static org.hamcrest.Matchers.is; +import static org.junit.Assert.assertThat; +import infrastructure.junitrule.SetUpAndTearDownDriver; + +import org.junit.Rule; +import org.junit.Test; + +public class FilePseudoClassTest { + + @Rule + public SetUpAndTearDownDriver setUpAndTearDownDriverRule = new SetUpAndTearDownDriver(getClass()); + + @Test + public void filePseudoClass() { + assertThat($("[type='file']").size(), is(4)); + assertThat($(":file").size(), is(1)); + assertThat($("*:file").size(), is(1)); + assertThat($("input:file").size(), is(1)); + assertThat($("div:file").size(), is(0)); + assertThat($("span:file").size(), is(0)); + + assertThat($("#i1").is(":file"), is(true)); + assertThat($("#i1").is("*:file"), is(true)); + assertThat($("#i1").is("input:file"), is(true)); + + assertThat($("#i2").is(":file"), is(false)); + assertThat($("#i3").is(":file"), is(false)); + assertThat($("#i4").is(":file"), is(false)); + } + } \ No newline at end of file diff --git a/src/test/java/io/github/seleniumquery/selector/conditionals/pseudoclasses/FocusPseudoClassTest.java b/src/test/java/integration/selectors/pseudoclasses/form/FocusPseudoClassTest.java similarity index 55% rename from src/test/java/io/github/seleniumquery/selector/conditionals/pseudoclasses/FocusPseudoClassTest.java rename to src/test/java/integration/selectors/pseudoclasses/form/FocusPseudoClassTest.java index c0410d80..82b73772 100644 --- a/src/test/java/io/github/seleniumquery/selector/conditionals/pseudoclasses/FocusPseudoClassTest.java +++ b/src/test/java/integration/selectors/pseudoclasses/form/FocusPseudoClassTest.java @@ -1,6 +1,4 @@ -package io.github.seleniumquery.by.evaluator.conditionals.pseudoclasses; - -import io.github.seleniumquery.functions.FocusFunctionTest; +package integration.selectors.pseudoclasses.form; import org.junit.Test; @@ -8,7 +6,7 @@ public class FocusPseudoClassTest { /** * There are no tests here. This pseudo is tested in conjunction with the .focus() function. - * Check {@link FocusFunctionTest} for the :focus tests! + * Check {@link integration.functions.jquery.forms.FocusFunctionTest} for the :focus tests! */ @Test public void focusPseudoClass() { /* intentionally left blank */ } diff --git a/src/test/java/io/github/seleniumquery/selector/conditionals/pseudoclasses/FocusablePseudoClassTest.html b/src/test/java/integration/selectors/pseudoclasses/form/FocusablePseudoClassTest.html similarity index 100% rename from src/test/java/io/github/seleniumquery/selector/conditionals/pseudoclasses/FocusablePseudoClassTest.html rename to src/test/java/integration/selectors/pseudoclasses/form/FocusablePseudoClassTest.html diff --git a/src/test/java/io/github/seleniumquery/selector/conditionals/pseudoclasses/FocusablePseudoClassTest.java b/src/test/java/integration/selectors/pseudoclasses/form/FocusablePseudoClassTest.java similarity index 75% rename from src/test/java/io/github/seleniumquery/selector/conditionals/pseudoclasses/FocusablePseudoClassTest.java rename to src/test/java/integration/selectors/pseudoclasses/form/FocusablePseudoClassTest.java index 4cb277ab..26a0d1e4 100644 --- a/src/test/java/io/github/seleniumquery/selector/conditionals/pseudoclasses/FocusablePseudoClassTest.java +++ b/src/test/java/integration/selectors/pseudoclasses/form/FocusablePseudoClassTest.java @@ -1,33 +1,34 @@ -package io.github.seleniumquery.by.evaluator.conditionals.pseudoclasses; - -import static io.github.seleniumquery.SeleniumQuery.$; -import static org.hamcrest.Matchers.is; -import static org.junit.Assert.assertThat; -import io.github.seleniumquery.SetUpAndTearDownDriver; - -import org.junit.Rule; -import org.junit.Test; - -public class FocusablePseudoClassTest { - - @Rule - public SetUpAndTearDownDriver setUpAndTearDownDriverRule = new SetUpAndTearDownDriver(); - - @Test - public void focusablePseudoClass() { - assertThat($("body > *").size(), is(6)); - assertThat($(":focusable").size(), is(3)); - - assertThat($("input:focusable").size(), is(1)); - assertThat($("a:focusable").size(), is(1)); - assertThat($("p:focusable").size(), is(1)); - - assertThat($("#i1").is(":focusable"), is(false)); - assertThat($("#i2").is(":focusable"), is(true)); - assertThat($("#a1").is(":focusable"), is(false)); - assertThat($("#a2").is(":focusable"), is(true)); - assertThat($("#p1").is(":focusable"), is(false)); - assertThat($("#p2").is(":focusable"), is(true)); - } - +package integration.selectors.pseudoclasses.form; + +import static io.github.seleniumquery.SeleniumQuery.$; +import static org.hamcrest.Matchers.is; +import static org.junit.Assert.assertThat; +import infrastructure.junitrule.SetUpAndTearDownDriver; +import io.github.seleniumquery.by.css.pseudoclasses.UnsupportedXPathPseudoClassException; + +import org.junit.Rule; +import org.junit.Test; + +public class FocusablePseudoClassTest { + + @Rule + public SetUpAndTearDownDriver setUpAndTearDownDriverRule = new SetUpAndTearDownDriver(getClass()); + + @Test(expected = UnsupportedXPathPseudoClassException.class) + public void focusablePseudoClass() { + assertThat($("body > *").size(), is(6)); + assertThat($(":focusable").size(), is(3)); + + assertThat($("input:focusable").size(), is(1)); + assertThat($("a:focusable").size(), is(1)); + assertThat($("p:focusable").size(), is(1)); + + assertThat($("#i1").is(":focusable"), is(false)); + assertThat($("#i2").is(":focusable"), is(true)); + assertThat($("#a1").is(":focusable"), is(false)); + assertThat($("#a2").is(":focusable"), is(true)); + assertThat($("#p1").is(":focusable"), is(false)); + assertThat($("#p2").is(":focusable"), is(true)); + } + } \ No newline at end of file diff --git a/src/test/java/io/github/seleniumquery/selector/conditionals/pseudoclasses/ImagePseudoClassTest.html b/src/test/java/integration/selectors/pseudoclasses/form/ImagePseudoClassTest.html similarity index 95% rename from src/test/java/io/github/seleniumquery/selector/conditionals/pseudoclasses/ImagePseudoClassTest.html rename to src/test/java/integration/selectors/pseudoclasses/form/ImagePseudoClassTest.html index 1c884f4f..b9d1db92 100644 --- a/src/test/java/io/github/seleniumquery/selector/conditionals/pseudoclasses/ImagePseudoClassTest.html +++ b/src/test/java/integration/selectors/pseudoclasses/form/ImagePseudoClassTest.html @@ -1,16 +1,16 @@ - - - - - seleniumQuery :image test page - - - - -
image
- image - - - - + + + + + seleniumQuery :image test page + + + + +
image
+ image + + + + \ No newline at end of file diff --git a/src/test/java/io/github/seleniumquery/selector/conditionals/pseudoclasses/ImagePseudoClassTest.java b/src/test/java/integration/selectors/pseudoclasses/form/ImagePseudoClassTest.java similarity index 82% rename from src/test/java/io/github/seleniumquery/selector/conditionals/pseudoclasses/ImagePseudoClassTest.java rename to src/test/java/integration/selectors/pseudoclasses/form/ImagePseudoClassTest.java index c5eb57ca..4c4157a5 100644 --- a/src/test/java/io/github/seleniumquery/selector/conditionals/pseudoclasses/ImagePseudoClassTest.java +++ b/src/test/java/integration/selectors/pseudoclasses/form/ImagePseudoClassTest.java @@ -1,34 +1,34 @@ -package io.github.seleniumquery.by.evaluator.conditionals.pseudoclasses; - -import static io.github.seleniumquery.SeleniumQuery.$; -import static org.hamcrest.Matchers.is; -import static org.junit.Assert.assertThat; -import io.github.seleniumquery.SetUpAndTearDownDriver; - -import org.junit.Rule; -import org.junit.Test; - -public class ImagePseudoClassTest { - - @Rule - public SetUpAndTearDownDriver setUpAndTearDownDriverRule = new SetUpAndTearDownDriver(); - - @Test - public void imagePseudoClass() { - assertThat($("[type='image']").size(), is(4)); - assertThat($(":image").size(), is(1)); - assertThat($("*:image").size(), is(1)); - assertThat($("input:image").size(), is(1)); - assertThat($("div:image").size(), is(0)); - assertThat($("span:image").size(), is(0)); - - assertThat($("#i1").is(":image"), is(true)); - assertThat($("#i1").is("*:image"), is(true)); - assertThat($("#i1").is("input:image"), is(true)); - - assertThat($("#i2").is(":image"), is(false)); - assertThat($("#i3").is(":image"), is(false)); - assertThat($("#i4").is(":image"), is(false)); - } - +package integration.selectors.pseudoclasses.form; + +import static io.github.seleniumquery.SeleniumQuery.$; +import static org.hamcrest.Matchers.is; +import static org.junit.Assert.assertThat; +import infrastructure.junitrule.SetUpAndTearDownDriver; + +import org.junit.Rule; +import org.junit.Test; + +public class ImagePseudoClassTest { + + @Rule + public SetUpAndTearDownDriver setUpAndTearDownDriverRule = new SetUpAndTearDownDriver(getClass()); + + @Test + public void imagePseudoClass() { + assertThat($("[type='image']").size(), is(4)); + assertThat($(":image").size(), is(1)); + assertThat($("*:image").size(), is(1)); + assertThat($("input:image").size(), is(1)); + assertThat($("div:image").size(), is(0)); + assertThat($("span:image").size(), is(0)); + + assertThat($("#i1").is(":image"), is(true)); + assertThat($("#i1").is("*:image"), is(true)); + assertThat($("#i1").is("input:image"), is(true)); + + assertThat($("#i2").is(":image"), is(false)); + assertThat($("#i3").is(":image"), is(false)); + assertThat($("#i4").is(":image"), is(false)); + } + } \ No newline at end of file diff --git a/src/test/java/io/github/seleniumquery/selector/conditionals/pseudoclasses/InputPseudoClassTest.html b/src/test/java/integration/selectors/pseudoclasses/form/InputPseudoClassTest.html similarity index 100% rename from src/test/java/io/github/seleniumquery/selector/conditionals/pseudoclasses/InputPseudoClassTest.html rename to src/test/java/integration/selectors/pseudoclasses/form/InputPseudoClassTest.html diff --git a/src/test/java/io/github/seleniumquery/selector/conditionals/pseudoclasses/InputPseudoClassTest.java b/src/test/java/integration/selectors/pseudoclasses/form/InputPseudoClassTest.java similarity index 85% rename from src/test/java/io/github/seleniumquery/selector/conditionals/pseudoclasses/InputPseudoClassTest.java rename to src/test/java/integration/selectors/pseudoclasses/form/InputPseudoClassTest.java index e99fa574..ac513243 100644 --- a/src/test/java/io/github/seleniumquery/selector/conditionals/pseudoclasses/InputPseudoClassTest.java +++ b/src/test/java/integration/selectors/pseudoclasses/form/InputPseudoClassTest.java @@ -1,43 +1,43 @@ -package io.github.seleniumquery.by.evaluator.conditionals.pseudoclasses; - -import static io.github.seleniumquery.SeleniumQuery.$; -import static org.hamcrest.Matchers.is; -import static org.junit.Assert.assertThat; -import io.github.seleniumquery.SetUpAndTearDownDriver; - -import org.junit.Rule; -import org.junit.Test; - -public class InputPseudoClassTest { - - @Rule - public SetUpAndTearDownDriver setUpAndTearDownDriverRule = new SetUpAndTearDownDriver(); - - // http://jsbin.com/nuhefeqi/1/edit - @Test - public void inputPseudoClass() { - assertThat($("[type='input']").size(), is(2)); - assertThat($(":input").size(), is(82)); - assertThat($("*:input").size(), is(82)); - - assertThat($("input:input").size(), is(73)); - assertThat($("button:input").size(), is(3)); - assertThat($("select:input").size(), is(3)); - assertThat($("textarea:input").size(), is(3)); - assertThat($("option:input").size(), is(0)); - assertThat($("optgroup:input").size(), is(0)); - - assertThat($("div:input").size(), is(0)); - assertThat($("span:input").size(), is(0)); - - assertThat($("#i1").is(":input"), is(true)); - assertThat($("#i1").is("*:input"), is(true)); - assertThat($("#i1").is("input:input"), is(true)); - - assertThat($("#i3").is(":input"), is(false)); - assertThat($("#i4").is(":input"), is(false)); - - assertThat($("#b1").is(":input"), is(true)); - } - +package integration.selectors.pseudoclasses.form; + +import static io.github.seleniumquery.SeleniumQuery.$; +import static org.hamcrest.Matchers.is; +import static org.junit.Assert.assertThat; +import infrastructure.junitrule.SetUpAndTearDownDriver; + +import org.junit.Rule; +import org.junit.Test; + +public class InputPseudoClassTest { + + @Rule + public SetUpAndTearDownDriver setUpAndTearDownDriverRule = new SetUpAndTearDownDriver(getClass()); + + // http://jsbin.com/nuhefeqi/1/edit + @Test + public void inputPseudoClass() { + assertThat($("[type='input']").size(), is(2)); + assertThat($(":input").size(), is(82)); + assertThat($("*:input").size(), is(82)); + + assertThat($("input:input").size(), is(73)); + assertThat($("button:input").size(), is(3)); + assertThat($("select:input").size(), is(3)); + assertThat($("textarea:input").size(), is(3)); + assertThat($("option:input").size(), is(0)); + assertThat($("optgroup:input").size(), is(0)); + + assertThat($("div:input").size(), is(0)); + assertThat($("span:input").size(), is(0)); + + assertThat($("#i1").is(":input"), is(true)); + assertThat($("#i1").is("*:input"), is(true)); + assertThat($("#i1").is("input:input"), is(true)); + + assertThat($("#i3").is(":input"), is(false)); + assertThat($("#i4").is(":input"), is(false)); + + assertThat($("#b1").is(":input"), is(true)); + } + } \ No newline at end of file diff --git a/src/test/java/io/github/seleniumquery/selector/conditionals/pseudoclasses/PasswordPseudoClassTest.html b/src/test/java/integration/selectors/pseudoclasses/form/PasswordPseudoClassTest.html similarity index 96% rename from src/test/java/io/github/seleniumquery/selector/conditionals/pseudoclasses/PasswordPseudoClassTest.html rename to src/test/java/integration/selectors/pseudoclasses/form/PasswordPseudoClassTest.html index 91ec4978..01876072 100644 --- a/src/test/java/io/github/seleniumquery/selector/conditionals/pseudoclasses/PasswordPseudoClassTest.html +++ b/src/test/java/integration/selectors/pseudoclasses/form/PasswordPseudoClassTest.html @@ -1,15 +1,15 @@ - - - - - seleniumQuery :password test page - - - - -
password
- password - - - + + + + + seleniumQuery :password test page + + + + +
password
+ password + + + \ No newline at end of file diff --git a/src/test/java/io/github/seleniumquery/selector/conditionals/pseudoclasses/PasswordPseudoClassTest.java b/src/test/java/integration/selectors/pseudoclasses/form/PasswordPseudoClassTest.java similarity index 83% rename from src/test/java/io/github/seleniumquery/selector/conditionals/pseudoclasses/PasswordPseudoClassTest.java rename to src/test/java/integration/selectors/pseudoclasses/form/PasswordPseudoClassTest.java index 8f55f282..3c215fec 100644 --- a/src/test/java/io/github/seleniumquery/selector/conditionals/pseudoclasses/PasswordPseudoClassTest.java +++ b/src/test/java/integration/selectors/pseudoclasses/form/PasswordPseudoClassTest.java @@ -1,34 +1,34 @@ -package io.github.seleniumquery.by.evaluator.conditionals.pseudoclasses; - -import static io.github.seleniumquery.SeleniumQuery.$; -import static org.hamcrest.Matchers.is; -import static org.junit.Assert.assertThat; -import io.github.seleniumquery.SetUpAndTearDownDriver; - -import org.junit.Rule; -import org.junit.Test; - -public class PasswordPseudoClassTest { - - @Rule - public SetUpAndTearDownDriver setUpAndTearDownDriverRule = new SetUpAndTearDownDriver(); - - @Test - public void passwordPseudoClass() { - assertThat($("[type='password']").size(), is(4)); - assertThat($(":password").size(), is(1)); - assertThat($("*:password").size(), is(1)); - assertThat($("input:password").size(), is(1)); - assertThat($("div:password").size(), is(0)); - assertThat($("span:password").size(), is(0)); - - assertThat($("#i1").is(":password"), is(true)); - assertThat($("#i1").is("*:password"), is(true)); - assertThat($("#i1").is("input:password"), is(true)); - - assertThat($("#i2").is(":password"), is(false)); - assertThat($("#i3").is(":password"), is(false)); - assertThat($("#i4").is(":password"), is(false)); - } - +package integration.selectors.pseudoclasses.form; + +import static io.github.seleniumquery.SeleniumQuery.$; +import static org.hamcrest.Matchers.is; +import static org.junit.Assert.assertThat; +import infrastructure.junitrule.SetUpAndTearDownDriver; + +import org.junit.Rule; +import org.junit.Test; + +public class PasswordPseudoClassTest { + + @Rule + public SetUpAndTearDownDriver setUpAndTearDownDriverRule = new SetUpAndTearDownDriver(getClass()); + + @Test + public void passwordPseudoClass() { + assertThat($("[type='password']").size(), is(4)); + assertThat($(":password").size(), is(1)); + assertThat($("*:password").size(), is(1)); + assertThat($("input:password").size(), is(1)); + assertThat($("div:password").size(), is(0)); + assertThat($("span:password").size(), is(0)); + + assertThat($("#i1").is(":password"), is(true)); + assertThat($("#i1").is("*:password"), is(true)); + assertThat($("#i1").is("input:password"), is(true)); + + assertThat($("#i2").is(":password"), is(false)); + assertThat($("#i3").is(":password"), is(false)); + assertThat($("#i4").is(":password"), is(false)); + } + } \ No newline at end of file diff --git a/src/test/java/io/github/seleniumquery/selector/conditionals/pseudoclasses/RadioPseudoClassTest.html b/src/test/java/integration/selectors/pseudoclasses/form/RadioPseudoClassTest.html similarity index 95% rename from src/test/java/io/github/seleniumquery/selector/conditionals/pseudoclasses/RadioPseudoClassTest.html rename to src/test/java/integration/selectors/pseudoclasses/form/RadioPseudoClassTest.html index 2a95939f..24fdf066 100644 --- a/src/test/java/io/github/seleniumquery/selector/conditionals/pseudoclasses/RadioPseudoClassTest.html +++ b/src/test/java/integration/selectors/pseudoclasses/form/RadioPseudoClassTest.html @@ -1,15 +1,15 @@ - - - - - seleniumQuery :radio test page - - - - -
radio
- radio - - - + + + + + seleniumQuery :radio test page + + + + +
radio
+ radio + + + \ No newline at end of file diff --git a/src/test/java/io/github/seleniumquery/selector/conditionals/pseudoclasses/RadioPseudoClassTest.java b/src/test/java/integration/selectors/pseudoclasses/form/RadioPseudoClassTest.java similarity index 82% rename from src/test/java/io/github/seleniumquery/selector/conditionals/pseudoclasses/RadioPseudoClassTest.java rename to src/test/java/integration/selectors/pseudoclasses/form/RadioPseudoClassTest.java index b86708aa..daf3cd8b 100644 --- a/src/test/java/io/github/seleniumquery/selector/conditionals/pseudoclasses/RadioPseudoClassTest.java +++ b/src/test/java/integration/selectors/pseudoclasses/form/RadioPseudoClassTest.java @@ -1,34 +1,34 @@ -package io.github.seleniumquery.by.evaluator.conditionals.pseudoclasses; - -import static io.github.seleniumquery.SeleniumQuery.$; -import static org.hamcrest.Matchers.is; -import static org.junit.Assert.assertThat; -import io.github.seleniumquery.SetUpAndTearDownDriver; - -import org.junit.Rule; -import org.junit.Test; - -public class RadioPseudoClassTest { - - @Rule - public SetUpAndTearDownDriver setUpAndTearDownDriverRule = new SetUpAndTearDownDriver(); - - @Test - public void radioPseudoClass() { - assertThat($("[type='radio']").size(), is(4)); - assertThat($(":radio").size(), is(1)); - assertThat($("*:radio").size(), is(1)); - assertThat($("input:radio").size(), is(1)); - assertThat($("div:radio").size(), is(0)); - assertThat($("span:radio").size(), is(0)); - - assertThat($("#i1").is(":radio"), is(true)); - assertThat($("#i1").is("*:radio"), is(true)); - assertThat($("#i1").is("input:radio"), is(true)); - - assertThat($("#i2").is(":radio"), is(false)); - assertThat($("#i3").is(":radio"), is(false)); - assertThat($("#i4").is(":radio"), is(false)); - } - +package integration.selectors.pseudoclasses.form; + +import static io.github.seleniumquery.SeleniumQuery.$; +import static org.hamcrest.Matchers.is; +import static org.junit.Assert.assertThat; +import infrastructure.junitrule.SetUpAndTearDownDriver; + +import org.junit.Rule; +import org.junit.Test; + +public class RadioPseudoClassTest { + + @Rule + public SetUpAndTearDownDriver setUpAndTearDownDriverRule = new SetUpAndTearDownDriver(getClass()); + + @Test + public void radioPseudoClass() { + assertThat($("[type='radio']").size(), is(4)); + assertThat($(":radio").size(), is(1)); + assertThat($("*:radio").size(), is(1)); + assertThat($("input:radio").size(), is(1)); + assertThat($("div:radio").size(), is(0)); + assertThat($("span:radio").size(), is(0)); + + assertThat($("#i1").is(":radio"), is(true)); + assertThat($("#i1").is("*:radio"), is(true)); + assertThat($("#i1").is("input:radio"), is(true)); + + assertThat($("#i2").is(":radio"), is(false)); + assertThat($("#i3").is(":radio"), is(false)); + assertThat($("#i4").is(":radio"), is(false)); + } + } \ No newline at end of file diff --git a/src/test/java/io/github/seleniumquery/selector/conditionals/pseudoclasses/ResetPseudoClassTest.html b/src/test/java/integration/selectors/pseudoclasses/form/ResetPseudoClassTest.html similarity index 96% rename from src/test/java/io/github/seleniumquery/selector/conditionals/pseudoclasses/ResetPseudoClassTest.html rename to src/test/java/integration/selectors/pseudoclasses/form/ResetPseudoClassTest.html index 21c398ea..8d1eb7c4 100644 --- a/src/test/java/io/github/seleniumquery/selector/conditionals/pseudoclasses/ResetPseudoClassTest.html +++ b/src/test/java/integration/selectors/pseudoclasses/form/ResetPseudoClassTest.html @@ -1,17 +1,17 @@ - - - - - seleniumQuery :reset test page - - - - -
reset
- reset - - - - - + + + + + seleniumQuery :reset test page + + + + +
reset
+ reset + + + + + \ No newline at end of file diff --git a/src/test/java/io/github/seleniumquery/selector/conditionals/pseudoclasses/ResetPseudoClassTest.java b/src/test/java/integration/selectors/pseudoclasses/form/ResetPseudoClassTest.java similarity index 85% rename from src/test/java/io/github/seleniumquery/selector/conditionals/pseudoclasses/ResetPseudoClassTest.java rename to src/test/java/integration/selectors/pseudoclasses/form/ResetPseudoClassTest.java index 10dd8506..5718d794 100644 --- a/src/test/java/io/github/seleniumquery/selector/conditionals/pseudoclasses/ResetPseudoClassTest.java +++ b/src/test/java/integration/selectors/pseudoclasses/form/ResetPseudoClassTest.java @@ -1,40 +1,40 @@ -package io.github.seleniumquery.by.evaluator.conditionals.pseudoclasses; - -import static io.github.seleniumquery.SeleniumQuery.$; -import static org.hamcrest.Matchers.is; -import static org.junit.Assert.assertThat; -import io.github.seleniumquery.SetUpAndTearDownDriver; - -import org.junit.Rule; -import org.junit.Test; - -public class ResetPseudoClassTest { - - @Rule - public SetUpAndTearDownDriver setUpAndTearDownDriverRule = new SetUpAndTearDownDriver(); - - // http://jsbin.com/kecoruga/1/edit - @Test - public void resetPseudoClass() { - assertThat($("[type='reset']").size(), is(5)); - assertThat($(":reset").size(), is(2)); - assertThat($("*:reset").size(), is(2)); - assertThat($("input:reset").size(), is(1)); - assertThat($("div:reset").size(), is(0)); - assertThat($("span:reset").size(), is(0)); - - assertThat($("#i1").is(":reset"), is(true)); - assertThat($("#i1").is("*:reset"), is(true)); - assertThat($("#i1").is("input:reset"), is(true)); - - assertThat($("#i2").is(":reset"), is(false)); - assertThat($("#i3").is(":reset"), is(false)); - assertThat($("#i4").is(":reset"), is(false)); - - assertThat($("#b1").is(":reset"), is(false)); - assertThat($("#b1").is("[type='reset']"), is(false)); - assertThat($("#b2").is(":reset"), is(true)); - assertThat($("#b2").is("[type='reset']"), is(true)); - } - +package integration.selectors.pseudoclasses.form; + +import static io.github.seleniumquery.SeleniumQuery.$; +import static org.hamcrest.Matchers.is; +import static org.junit.Assert.assertThat; +import infrastructure.junitrule.SetUpAndTearDownDriver; + +import org.junit.Rule; +import org.junit.Test; + +public class ResetPseudoClassTest { + + @Rule + public SetUpAndTearDownDriver setUpAndTearDownDriverRule = new SetUpAndTearDownDriver(getClass()); + + // http://jsbin.com/kecoruga/1/edit + @Test + public void resetPseudoClass() { + assertThat($("[type='reset']").size(), is(5)); + assertThat($(":reset").size(), is(2)); + assertThat($("*:reset").size(), is(2)); + assertThat($("input:reset").size(), is(1)); + assertThat($("div:reset").size(), is(0)); + assertThat($("span:reset").size(), is(0)); + + assertThat($("#i1").is(":reset"), is(true)); + assertThat($("#i1").is("*:reset"), is(true)); + assertThat($("#i1").is("input:reset"), is(true)); + + assertThat($("#i2").is(":reset"), is(false)); + assertThat($("#i3").is(":reset"), is(false)); + assertThat($("#i4").is(":reset"), is(false)); + + assertThat($("#b1").is(":reset"), is(false)); + assertThat($("#b1").is("[type='reset']"), is(false)); + assertThat($("#b2").is(":reset"), is(true)); + assertThat($("#b2").is("[type='reset']"), is(true)); + } + } \ No newline at end of file diff --git a/src/test/java/integration/selectors/pseudoclasses/form/SelectedPseudoClassTest.html b/src/test/java/integration/selectors/pseudoclasses/form/SelectedPseudoClassTest.html new file mode 100644 index 00000000..05473c35 --- /dev/null +++ b/src/test/java/integration/selectors/pseudoclasses/form/SelectedPseudoClassTest.html @@ -0,0 +1,33 @@ + + + + + seleniumQuery :selected test page + + + + + + + + + There is no selected attribute, but #s1o1 is :selected. + + + Multiple attribute, but no selected attribute in the options. :selected shouldn't match any of them. + + + + \ No newline at end of file diff --git a/src/test/java/integration/selectors/pseudoclasses/form/SelectedPseudoClassTest.java b/src/test/java/integration/selectors/pseudoclasses/form/SelectedPseudoClassTest.java new file mode 100644 index 00000000..2401cf9e --- /dev/null +++ b/src/test/java/integration/selectors/pseudoclasses/form/SelectedPseudoClassTest.java @@ -0,0 +1,28 @@ +package integration.selectors.pseudoclasses.form; + +import static infrastructure.IntegrationTestUtils.t; +import static io.github.seleniumquery.SeleniumQuery.$; +import static org.hamcrest.Matchers.is; +import static org.junit.Assert.assertThat; + +import infrastructure.junitrule.SetUpAndTearDownDriver; + +import org.junit.ClassRule; +import org.junit.Test; + +public class SelectedPseudoClassTest { + + @ClassRule + public static SetUpAndTearDownDriver setUpAndTearDownDriverRule = new SetUpAndTearDownDriver(SelectedPseudoClassTest.class); + + @Test + public void selectedPseudoClass() { + t(":selected pseudo should not work on checkboxes", "input[type=checkbox]:selected").negative("input[type=checkbox]", "chk1", "chk2"); + t(":selected pseudo should not work on radios", "input[type=radio]:selected").negative("input[type=radio]", "rad1", "rad2"); + t(":selected pseudo should not work on inputs", "input[type=checkbox]:selected").negative("input", 4); + t(":selected pseudo should return all selected