MOBILE-3947 behat: Get field when label is inside

main
Pau Ferrer Ocaña 2024-01-09 15:42:33 +01:00
parent de5c6633ef
commit ebb0df1362
2 changed files with 20 additions and 4 deletions

View File

@ -133,7 +133,6 @@ Feature: Attempt a quiz in app
And I should find "Question 1" in the app And I should find "Question 1" in the app
And I should find "Question 2" in the app And I should find "Question 2" in the app
@ionic7_failure
Scenario: Attempt a quiz (all question types) Scenario: Attempt a quiz (all question types)
Given I entered the quiz activity "Quiz 2" on course "Course 1" as "student1" in the app Given I entered the quiz activity "Quiz 2" on course "Course 1" as "student1" in the app
When I press "Attempt quiz now" in the app When I press "Attempt quiz now" in the app

View File

@ -424,11 +424,18 @@ export class TestingBehatDomUtilsService {
* @returns Field element. * @returns Field element.
*/ */
findField(field: string): HTMLElement | HTMLInputElement | undefined { findField(field: string): HTMLElement | HTMLInputElement | undefined {
const input = this.findElementBasedOnText( const selector =
{ text: field, selector: 'input, textarea, [contenteditable="true"], ion-select, ion-datetime-button, ion-datetime' }, 'input, textarea, core-rich-text-editor, [contenteditable="true"], ion-select, ion-datetime-button, ion-datetime';
let input = this.findElementBasedOnText(
{ text: field, selector },
{ onlyClickable: false, containerName: '' }, { onlyClickable: false, containerName: '' },
); );
if (input?.tagName === 'CORE-RICH-TEXT-EDITOR') {
input = input.querySelector<HTMLElement>('[contenteditable="true"]') || undefined;
}
if (input) { if (input) {
return input; return input;
} }
@ -441,7 +448,17 @@ export class TestingBehatDomUtilsService {
if (label) { if (label) {
const inputId = label.getAttribute('for'); const inputId = label.getAttribute('for');
return (inputId && document.getElementById(inputId)) || undefined; if (inputId) {
return document.getElementById(inputId) || undefined;
}
input = this.getShadowDOMHost(label) || undefined;
// Add support for other input types if required by adding them to the array.
const ionicInputFields = ['ION-INPUT', 'ION-TEXTAREA', 'ION-SELECT', 'ION-DATETIME', 'ION-TOGGLE'];
if (input && ionicInputFields.includes(input.tagName)) {
return input;
}
} }
} }