Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Appearance settings
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -1,25 +1,29 @@
package io.github.seleniumquery.selectors.pseudoclasses;

import io.github.seleniumquery.selector.CompiledCssSelector;
import io.github.seleniumquery.selector.CssFilter;
import io.github.seleniumquery.selector.DriverSupportService;

import java.util.Arrays;
import java.util.List;
import io.github.seleniumquery.selector.SqElementFilter;
import io.github.seleniumquery.selector.SqXPathSelector;
import io.github.seleniumquery.selector.XPathSelectorFactory;

import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;

public class CheckedPseudoClass implements PseudoClass {

private static final String INPUT_TAG_NAME = "input";
private static final String OPTION_TAG_NAME = "option";

private static final String TYPE_ATTRIBUTE_NAME = "type";
private static final String RADIO_ATTR_VALUE = "radio";
private static final String CHECKBOX_ATTR_VALUE = "checkbox";

private static final CheckedPseudoClass instance = new CheckedPseudoClass();
public static CheckedPseudoClass getInstance() {
return instance;
}
private CheckedPseudoClass() { }

private static final List<String> CHECKED_ALLOWED_TAGS = Arrays.asList("input", "option");

private static final String CHECKED_PSEUDO_CLASS_NO_COLON = "checked";
private static final String CHECKED_PSEUDO_CLASS = ":"+CHECKED_PSEUDO_CLASS_NO_COLON;

Expand All @@ -34,10 +38,17 @@ public boolean isPseudoClass(WebDriver driver, WebElement element, PseudoClassSe
}

public boolean isChecked(WebElement element) {
return CHECKED_ALLOWED_TAGS.contains(element.getTagName()) && element.isSelected();
String tagName = element.getTagName();
String typeAttribute = element.getAttribute(TYPE_ATTRIBUTE_NAME);
return element.isSelected() &&
(
OPTION_TAG_NAME.equals(tagName)
||
(INPUT_TAG_NAME.equals(tagName) && (RADIO_ATTR_VALUE.equals(typeAttribute) || CHECKBOX_ATTR_VALUE.equals(typeAttribute)) )
);
}

private static final CssFilter checkedPseudoClassFilter = new PseudoClassFilter(getInstance());
private static final SqElementFilter checkedPseudoClassFilter = new PseudoClassFilter(getInstance());
@Override
public CompiledCssSelector compilePseudoClass(WebDriver driver, PseudoClassSelector pseudoClassSelector) {
// https://developer.mozilla.org/en-US/docs/Web/CSS/:checked
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,9 +10,9 @@
<button type="button" disabled>Click Me!</button>
<button type="button" disabled="disabled">Click Me!</button>
<br>
<input type="button" value="Click me" onclick="msg()">
<input type="button" value="Click me" onclick="msg()" disabled>
<input type="button" value="Click me" onclick="msg()" disabled="disabled">
<input class="c" type="button" value="Click me" onclick="msg()">
<input class="c" type="button" value="Click me" onclick="msg()" disabled>
<input class="c" type="button" value="Click me" onclick="msg()" disabled="disabled">
<br>
<input type="checkbox" name="vehicle1" value="Bike1">
<input type="checkbox" name="vehicle2" value="Bike2" disabled>
Expand Down
Original file line number Diff line number Diff line change
@@ -1,51 +1,58 @@
package io.github.seleniumquery.selector.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 EnabledPseudoClassTest {

@Rule
public SetUpAndTearDownDriver setUpAndTearDownDriverRule = new SetUpAndTearDownDriver();

@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));
}

package io.github.seleniumquery.selector.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 EnabledPseudoClassTest {

@Rule
public SetUpAndTearDownDriver setUpAndTearDownDriverRule = new SetUpAndTearDownDriver();

@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));
}

}
Original file line number Diff line number Diff line change
@@ -1,19 +1,25 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>seleniumQuery :hidden test page</title>
</head>
<body>
<div id="hiddenDiv" class="clz" style="display: none">
<h1 class="btn"></h1>
<button class="spanYo" style="display: none">yo</button>
<span class="yo2" style="display: block">yodiv</span>
</div>
<div id="visibleDiv" class="clz">
<h1 class="btn">aa</h1>
<button class="spanYo">aa</button>
<span class="yo2">bb</span>
</div>
</body>
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>seleniumQuery :hidden test page</title>
<style type="text/css">
.notVisible { display: none; }
</style>
</head>
<body>
<div id="hiddenDiv" class="clz" style="display: none">
<h1 class="btn"></h1>
<button class="spanYo" style="display: none">yo</button>
<span class="yo2" style="display: block">yodiv</span>
</div>
<div id="visibleDiv" class="clz">
<h1 class="btn">aa</h1>
<button class="spanYo">aa</button>
<span class="yo2">bb</span>
</div>
<div id="hiddenByClass" class="notVisible">
<p>this p is hidden by a class in its parent</p>
</div>
</body>
</html>
Original file line number Diff line number Diff line change
@@ -1,10 +1,10 @@
package io.github.seleniumquery.selector.conditionals.pseudoclasses;

import static io.github.seleniumquery.SeleniumQuery.$;
import static org.hamcrest.Matchers.hasSize;
import static org.hamcrest.Matchers.is;
import static org.junit.Assert.assertThat;
import io.github.seleniumquery.SetUpAndTearDownDriver;
import io.github.seleniumquery.selector.CssSelectorCompilerServiceTest;

import java.util.List;

Expand All @@ -19,16 +19,18 @@ public class HiddenPseudoClassTest {

@Test
public void hiddenPseudoClass() {
List<WebElement> elements = CssSelectorCompilerServiceTest.compileAndExecute(":hidden");
List<WebElement> elements = $(":hidden").get();

assertThat(elements, hasSize(7));
assertThat(elements, hasSize(9));
assertThat(elements.get(0).getTagName(), is("head"));
assertThat(elements.get(1).getTagName(), is("meta"));
assertThat(elements.get(2).getTagName(), is("title"));
assertThat(elements.get(3).getTagName(), is("div"));
assertThat(elements.get(4).getTagName(), is("h1"));
assertThat(elements.get(5).getTagName(), is("button"));
assertThat(elements.get(6).getTagName(), is("span"));
assertThat(elements.get(7).getTagName(), is("div"));
assertThat(elements.get(8).getTagName(), is("p"));
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -13,5 +13,7 @@
<submit type="submit"></submit>
<button id="b1"></button>
<button id="b2" type="submit"></button>

<input id="i1c" class="clz" type="submit">
</body>
</html>
Original file line number Diff line number Diff line change
Expand Up @@ -13,13 +13,13 @@ public class SubmitPseudoClassTest {
@Rule
public SetUpAndTearDownDriver setUpAndTearDownDriverRule = new SetUpAndTearDownDriver();

// http://jsbin.com/mopireya/1/edit
// http://jsbin.com/mopireya/6/edit
@Test
public void submitPseudoClass() {
assertThat($("[type='submit']").size(), is(5));
assertThat($(":submit").size(), is(3));
assertThat($("*:submit").size(), is(3));
assertThat($("input:submit").size(), is(1));
assertThat($("[type='submit']").size(), is(6));
assertThat($(":submit").size(), is(4));
assertThat($("*:submit").size(), is(4));
assertThat($("input:submit").size(), is(2));
assertThat($("div:submit").size(), is(0));
assertThat($("span:submit").size(), is(0));

Expand All @@ -33,6 +33,7 @@ public void submitPseudoClass() {

assertThat($("#b1").is(":submit"), is(true));

// #Cross-Driver (not a workaround, just documenting a difference)
// the line below depends on the browser
// firefox (only when through selenium!!!) considers that element's attribute type is
// actually submit, even though it is empty.
Expand All @@ -44,6 +45,9 @@ public void submitPseudoClass() {

assertThat($("#b2").is(":submit"), is(true));
assertThat($("#b2").is("[type='submit']"), is(true));

assertThat($(".clz:submit").size(), is(1));
assertThat($("#i1c").is(".clz:submit"), is(true));
}

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>seleniumQuery #id test page</title>
</head>
<body>
<div id="myId">abc</div>
</body>
</html>
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
package io.github.seleniumquery.selectors.attributes;

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 IdAttributeCssSelectorTest {

@Rule
public SetUpAndTearDownDriver setUpAndTearDownDriverRule = new SetUpAndTearDownDriver();

@Test
public void visiblePseudoClass() throws Exception {
assertThat($("#myId").size(), is(1));
assertThat($("#myId").text(), is("abc"));
}

}
Morty Proxy This is a proxified and sanitized view of the page, visit original site.