blob: 45493b730d6957027af46f1314290d13aaab40af [file] [log] [blame]
import pytest
from tests.support.asserts import assert_error, assert_success
def element_click(session, element):
return session.transport.send(
"POST", "session/{session_id}/element/{element_id}/click".format(
session_id=session.session_id,
element_id=element.id))
@pytest.fixture
def get_checkbox_dom(inline):
return inline("""
<style>
custom-checkbox-element {
display:block; width:20px; height:20px;
}
</style>
<custom-checkbox-element></custom-checkbox-element>
<script>
customElements.define('custom-checkbox-element',
class extends HTMLElement {
constructor() {
super();
this.attachShadow({mode: 'open'}).innerHTML = `
<div><input type="checkbox"/></div>
`;
}
});
</script>""")
@pytest.mark.parametrize("click_on", ["custom_element", "checkbox_element"])
def test_shadow_element_click(session, get_checkbox_dom, click_on):
session.url = get_checkbox_dom
custom_element = session.find.css("custom-checkbox-element", all=False)
checkbox_element = session.execute_script("return arguments[0].shadowRoot.querySelector('input')",
args=(custom_element,))
is_pre_checked = session.execute_script("return arguments[0].checked",
args=(checkbox_element,))
assert is_pre_checked == False
response = element_click(session, locals()[click_on])
assert_success(response)
is_post_checked = session.execute_script("return arguments[0].checked",
args=(checkbox_element,))
assert is_post_checked == True
@pytest.fixture
def get_nested_shadow_checkbox_dom(inline):
return inline("""
<style>
custom-nesting-element {
display:block; width:20px; height:20px;
}
</style>
<custom-nesting-element></custom-nesting-element>
<script>
customElements.define('custom-nesting-element',
class extends HTMLElement {
constructor() {
super();
this.attachShadow({mode: 'open'}).innerHTML = `
<style>
custom-checkbox-element {
display:block; width:20px; height:20px;
}
</style>
<div><custom-checkbox-element></custom-checkbox-element></div>
`;
}
});
customElements.define('custom-checkbox-element',
class extends HTMLElement {
constructor() {
super();
this.attachShadow({mode: 'open'}).innerHTML = `
<div><input type="checkbox"/></div>
`;
}
});
</script>""")
@pytest.mark.parametrize("click_on", ["outer_element", "inner_element", "checkbox_element"])
def test_nested_shadow_element_click(session, get_nested_shadow_checkbox_dom, click_on):
session.url = get_nested_shadow_checkbox_dom
outer_element = session.find.css("custom-nesting-element", all=False)
inner_element = session.execute_script("return arguments[0].shadowRoot.querySelector('custom-checkbox-element')",
args=(outer_element,))
checkbox_element = session.execute_script("return arguments[0].shadowRoot.querySelector('input')",
args=(inner_element,))
is_pre_checked = session.execute_script("return arguments[0].checked",
args=(checkbox_element,))
assert is_pre_checked == False
click_response = element_click(session, locals()[click_on])
assert_success(click_response)
is_post_checked = session.execute_script("return arguments[0].checked",
args=(checkbox_element,))
assert is_post_checked == True