Backed out 2 changesets (bug 1863266) for causing xpcshell failures on test_DOM.js. CLOSED TREE

Backed out changeset 8dd3f736b169 (bug 1863266)
Backed out changeset 8ff7b69bf4d6 (bug 1863266)
This commit is contained in:
Iulian Moraru 2023-11-09 21:53:57 +02:00
parent bc35d8e91d
commit d0224a2194
10 changed files with 161 additions and 340 deletions

View File

@ -596,23 +596,20 @@ dom.isDisabled = function (el) {
return false;
}
// Check form elements
switch (el.localName) {
case "option":
case "optgroup":
case "select":
if (el.disabled) {
return true;
}
let parent = dom.findClosest(el, "optgroup,select");
return dom.isDisabled(parent);
case "button":
case "input":
case "select":
case "textarea":
if (el.disabled) {
return el.disabled;
}
// Checking the disabled state of the element based on the parent nodes
// can be complex. This can more easily be done by just checking if the
// style will match.
// Note: This might trigger a flush of layout / styling.
return el.matches(":disabled");
return el.disabled;
default:
return false;

View File

@ -1,3 +1,3 @@
[is_enabled.py]
[enabled.py]
expected:
if (os == "android") and not debug: [OK, TIMEOUT]

View File

@ -1,36 +0,0 @@
def element_clear(session, element):
return session.transport.send(
"POST", "/session/{session_id}/element/{element_id}/clear".format(
session_id=session.session_id,
element_id=element.id))
BUTTON_TYPES = [
"button",
"reset",
"submit",
]
INPUT_TYPES = [
"button",
"checkbox",
"color",
"date",
"datetime-local",
"email",
"file",
"image",
"month",
"number",
"password",
"radio",
"range",
"reset",
"search",
"submit",
"tel",
"text",
"time",
"url",
"week",
];

View File

@ -10,8 +10,6 @@ from tests.support.asserts import (
assert_in_events,
assert_success,
)
from tests.support.dom import BUTTON_TYPES
from . import element_clear
@pytest.fixture
@ -23,6 +21,13 @@ def tracked_events():
]
def element_clear(session, element):
return session.transport.send(
"POST", "/session/{session_id}/element/{element_id}/clear".format(
session_id=session.session_id,
element_id=element.id))
@pytest.fixture(scope="session")
def text_file(tmpdir_factory):
fh = tmpdir_factory.mktemp("tmp").join("hello.txt")
@ -176,6 +181,31 @@ def test_input(session, inline, add_event_listeners, tracked_events, type, value
assert_element_has_focus(session.execute_script("return document.body"))
@pytest.mark.parametrize("type",
["number",
"range",
"email",
"password",
"search",
"tel",
"text",
"url",
"color",
"date",
"datetime",
"datetime-local",
"time",
"month",
"week",
"file"])
def test_input_disabled(session, inline, type):
session.url = inline("<input type=%s disabled>" % type)
element = session.find.css("input", all=False)
response = element_clear(session, element)
assert_error(response, "invalid element state")
@pytest.mark.parametrize("type",
["number",
"range",
@ -213,6 +243,14 @@ def test_textarea(session, inline, add_event_listeners, tracked_events):
assert_in_events(session, ["focus", "change", "blur"])
def test_textarea_disabled(session, inline):
session.url = inline("<textarea disabled></textarea>")
element = session.find.css("textarea", all=False)
response = element_clear(session, element)
assert_error(response, "invalid element state")
def test_textarea_readonly(session, inline):
session.url = inline("<textarea readonly></textarea>")
element = session.find.css("textarea", all=False)
@ -242,12 +280,26 @@ def test_input_file_multiple(session, text_file, inline):
assert element.property("value") == ""
@pytest.mark.parametrize("type", BUTTON_TYPES)
def test_button(session, inline, type):
session.url = inline(f"""<button type="{type}">""")
element = session.find.css("button", all=False)
def test_select(session, inline):
session.url = inline("""
<select>
<option>foo
</select>
""")
select = session.find.css("select", all=False)
option = session.find.css("option", all=False)
response = element_clear(session, element)
response = element_clear(session, select)
assert_error(response, "invalid element state")
response = element_clear(session, option)
assert_error(response, "invalid element state")
def test_button(session, inline):
session.url = inline("<button></button>")
button = session.find.css("button", all=False)
response = element_clear(session, button)
assert_error(response, "invalid element state")

View File

@ -1,104 +0,0 @@
import pytest
from tests.support.asserts import assert_error, assert_success
from tests.support.dom import BUTTON_TYPES, INPUT_TYPES
from . import element_clear
@pytest.mark.parametrize("type", BUTTON_TYPES)
def test_button(session, inline, type):
session.url = inline(f"""<button type="{type}" disabled>""")
element = session.find.css("button", all=False)
response = element_clear(session, element)
assert_error(response, "invalid element state")
@pytest.mark.parametrize("type", INPUT_TYPES)
def test_input(session, inline, type):
session.url = inline(f"""<input type="{type}" disabled>""")
element = session.find.css("input", all=False)
response = element_clear(session, element)
assert_error(response, "invalid element state")
def test_textarea(session, inline):
session.url = inline("<textarea disabled></textarea>")
element = session.find.css("textarea", all=False)
response = element_clear(session, element)
assert_error(response, "invalid element state")
def test_fieldset_descendant(session, inline):
session.url = inline("<fieldset disabled><input>foo")
element = session.find.css("input", all=False)
response = element_clear(session, element)
assert_error(response, "invalid element state")
def test_fieldset_descendant_first_legend(session, inline):
session.url = inline("<fieldset disabled><legend><input>foo")
element = session.find.css("input", all=False)
response = element_clear(session, element)
assert_success(response)
def test_fieldset_descendant_not_first_legend(session, inline):
session.url = inline("<fieldset disabled><legend></legend><legend><input>foo")
element = session.find.css("input", all=False)
response = element_clear(session, element)
assert_error(response, "invalid element state")
def test_option(session, inline):
session.url = inline("<select><option disabled>foo")
element = session.find.css("option", all=False)
response = element_clear(session, element)
assert_error(response, "invalid element state")
def test_option_select(session, inline):
session.url = inline("<select disabled><option>foo")
element = session.find.css("option", all=False)
response = element_clear(session, element)
assert_error(response, "invalid element state")
def test_option_optgroup(session, inline):
session.url = inline("<select><optgroup disabled><option>foo")
element = session.find.css("option", all=False)
response = element_clear(session, element)
assert_error(response, "invalid element state")
def test_select(session, inline):
session.url = inline("<select disabled>")
element = session.find.css("select", all=False)
response = element_clear(session, element)
assert_error(response, "invalid element state")
@pytest.mark.parametrize("type", ["button", "input", "select", "textarea"])
def test_xhtml(session, inline, type):
session.url = inline(f"""<{type} disabled="disabled"></{type}>""", doctype="xhtml")
element = session.find.css(type, all=False)
result = element_clear(session, element)
assert_error(result, "invalid element state")
def test_xml(session, inline):
session.url = inline("""<note></note>""", doctype="xml")
element = session.find.css("note", all=False)
result = element_clear(session, element)
assert_error(result, "invalid element state")

View File

@ -3,7 +3,13 @@
import pytest
from tests.support.asserts import assert_dialog_handled, assert_error, assert_success
from . import element_clear
def element_clear(session, element):
return session.transport.send(
"POST", "/session/{session_id}/element/{element_id}/clear".format(
session_id=session.session_id,
element_id=element.id))
@pytest.fixture

View File

@ -1,8 +0,0 @@
def is_element_enabled(session, element_id):
return session.transport.send(
"GET",
"session/{session_id}/element/{element_id}/enabled".format(
session_id=session.session_id,
element_id=element_id
)
)

View File

@ -3,8 +3,16 @@ import pytest
from webdriver import WebElement
from tests.support.asserts import assert_error, assert_success
from tests.support.dom import BUTTON_TYPES, INPUT_TYPES
from . import is_element_enabled
def is_element_enabled(session, element_id):
return session.transport.send(
"GET",
"session/{session_id}/element/{element_id}/enabled".format(
session_id=session.session_id,
element_id=element_id
)
)
def test_no_top_browsing_context(session, closed_window):
@ -82,154 +90,80 @@ def test_stale_element_reference(session, stale_element, as_frame):
assert_error(result, "stale element reference")
@pytest.mark.parametrize("status, expected", [
("", True),
("disabled", False),
], ids=["enabled", "disabled"])
@pytest.mark.parametrize("type", BUTTON_TYPES)
def test_button(session, inline, status, expected, type):
session.url = inline(f"""<button type="{type}" {status}>""")
element = session.find.css("button", all=False)
response = is_element_enabled(session, element.id)
assert_success(response, expected)
@pytest.mark.parametrize("status, expected", [
("", True),
("disabled", False),
], ids=["enabled", "disabled"])
@pytest.mark.parametrize("type", INPUT_TYPES)
def test_input(session, inline, status, expected, type):
session.url = inline(f"""<input type="{type}" {status}>""")
element = session.find.css("input", all=False)
@pytest.mark.parametrize("element", ["button", "input", "select", "textarea"])
def test_form_control_disabled(session, inline, element):
session.url = inline("<{} disabled/>".format(element))
element = session.find.css(element, all=False)
result = is_element_enabled(session, element.id)
assert_success(result, expected)
assert_success(result, False)
@pytest.mark.parametrize("status, expected", [
("", True),
("disabled", False),
], ids=["enabled", "disabled"])
def test_textarea(session, inline, status, expected):
session.url = inline(f"<textarea {status}></textarea>")
element = session.find.css("textarea", all=False)
response = is_element_enabled(session, element.id)
assert_success(response, expected)
@pytest.mark.parametrize("status, expected", [
("", True),
("disabled", False),
], ids=["enabled", "disabled"])
def test_fieldset(session, inline, status, expected):
session.url = inline(f"<fieldset {status}><input>foo")
element = session.find.css("input", all=False)
response = is_element_enabled(session, element.id)
assert_success(response, expected)
@pytest.mark.parametrize("status, expected", [
("", True),
("disabled", False),
], ids=["enabled", "disabled"])
def test_fieldset_descendant(session, inline, status, expected):
session.url = inline(f"<fieldset {status}><input>foo")
element = session.find.css("input", all=False)
response = is_element_enabled(session, element.id)
assert_success(response, expected)
@pytest.mark.parametrize("status, expected", [
("", True),
("disabled", True),
], ids=["enabled", "disabled"])
def test_fieldset_descendant_first_legend(session, inline, status, expected):
session.url = inline(f"<fieldset {status}><legend><input>foo")
element = session.find.css("input", all=False)
response = is_element_enabled(session, element.id)
assert_success(response, expected)
@pytest.mark.parametrize("status, expected", [
("", True),
("disabled", False),
], ids=["enabled", "disabled"])
def test_fieldset_descendant_not_first_legend(session, inline, status, expected):
session.url = inline(f"<fieldset {status}><legend></legend><legend><input>foo")
element = session.find.css("input", all=False)
response = is_element_enabled(session, element.id)
assert_success(response, expected)
@pytest.mark.parametrize("status, expected", [
("", True),
("disabled", False),
], ids=["enabled", "disabled"])
def test_option(session, inline, status, expected):
session.url = inline(f"<select><option {status}>foo")
element = session.find.css("option", all=False)
response = is_element_enabled(session, element.id)
assert_success(response, expected)
@pytest.mark.parametrize("status, expected", [
("", True),
("disabled", False),
], ids=["enabled", "disabled"])
def test_option_select(session, inline, status, expected):
session.url = inline(f"<select {status}><option>foo")
element = session.find.css("option", all=False)
response = is_element_enabled(session, element.id)
assert_success(response, expected)
@pytest.mark.parametrize("status, expected", [
("", True),
("disabled", False),
], ids=["enabled", "disabled"])
def test_option_optgroup(session, inline, status, expected):
session.url = inline(f"<select><optgroup {status}><option>foo")
element = session.find.css("option", all=False)
response = is_element_enabled(session, element.id)
assert_success(response, expected)
@pytest.mark.parametrize("status, expected", [
("", True),
("disabled", False),
], ids=["enabled", "disabled"])
def test_select(session, inline, status, expected):
session.url = inline(f"<select {status}>")
element = session.find.css("select", all=False)
response = is_element_enabled(session, element.id)
assert_success(response, expected)
@pytest.mark.parametrize("status, expected", [
("", True),
("disabled=\"disabled\"", False),
], ids=["enabled", "disabled"])
@pytest.mark.parametrize("type", ["button", "input", "select", "textarea"])
def test_xhtml(session, inline, status, expected, type):
session.url = inline(f"""<{type} {status}></{type}>""", doctype="xhtml")
element = session.find.css(type, all=False)
@pytest.mark.parametrize("element", ["button", "input", "select", "textarea"])
def test_form_control_enabled(session, inline, element):
session.url = inline("<{}/>".format(element))
element = session.find.css(element, all=False)
result = is_element_enabled(session, element.id)
assert_success(result, expected)
assert_success(result, True)
def test_xml(session, inline):
@pytest.mark.parametrize("element", ["button", "input", "select", "textarea"])
def test_fieldset_disabled_descendant(session, inline, element):
session.url = inline("<fieldset disabled><{}/></fieldset>".format(element))
element = session.find.css(element, all=False)
result = is_element_enabled(session, element.id)
assert_success(result, False)
@pytest.mark.parametrize("element", ["button", "input", "select", "textarea"])
def test_fieldset_enabled_descendant(session, inline, element):
session.url = inline("<fieldset><{}/></fieldset>".format(element))
element = session.find.css(element, all=False)
result = is_element_enabled(session, element.id)
assert_success(result, True)
@pytest.mark.parametrize("element", ["button", "input", "select", "textarea"])
def test_fieldset_disabled_descendant_legend(session, inline, element):
session.url = inline("<fieldset disabled><legend><{}/></legend></fieldset>".format(element))
element = session.find.css(element, all=False)
result = is_element_enabled(session, element.id)
assert_success(result, True)
@pytest.mark.parametrize("element", ["button", "input", "select", "textarea"])
def test_fieldset_enabled_descendant_legend(session, inline, element):
session.url = inline("<fieldset><legend><{}/></legend></fieldset>".format(element))
element = session.find.css(element, all=False)
result = is_element_enabled(session, element.id)
assert_success(result, True)
@pytest.mark.parametrize("element", ["button", "input", "select", "textarea"])
def test_xhtml_form_control_disabled(session, inline, element):
session.url = inline("""<{} disabled="disabled"/>""".format(element),
doctype="xhtml")
element = session.find.css(element, all=False)
result = is_element_enabled(session, element.id)
assert_success(result, False)
@pytest.mark.parametrize("element", ["button", "input", "select", "textarea"])
def test_xhtml_form_control_enabled(session, inline, element):
session.url = inline("""<{}/>""".format(element), doctype="xhtml")
element = session.find.css(element, all=False)
result = is_element_enabled(session, element.id)
assert_success(result, True)
def test_xml_always_not_enabled(session, inline):
session.url = inline("""<note></note>""", doctype="xml")
element = session.find.css("note", all=False)

View File

@ -3,7 +3,16 @@
import pytest
from tests.support.asserts import assert_error, assert_dialog_handled, assert_success
from . import is_element_enabled
def is_element_enabled(session, element_id):
return session.transport.send(
"GET",
"session/{session_id}/element/{element_id}/enabled".format(
session_id=session.session_id,
element_id=element_id
)
)
@pytest.fixture

View File

@ -1,29 +0,0 @@
BUTTON_TYPES = [
"button",
"reset",
"submit",
]
INPUT_TYPES = [
"button",
"checkbox",
"color",
"date",
"datetime-local",
"email",
"file",
"image",
"month",
"number",
"password",
"radio",
"range",
"reset",
"search",
"submit",
"tel",
"text",
"time",
"url",
"week",
];