MOBILE-4270 behat: Support setting fields by label
parent
874f47ebad
commit
a8e7e61e1e
|
@ -384,6 +384,34 @@ export class TestingBehatDomUtilsService {
|
||||||
return topContainers;
|
return topContainers;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Find a field.
|
||||||
|
*
|
||||||
|
* @param field Field name.
|
||||||
|
* @returns Field element.
|
||||||
|
*/
|
||||||
|
findField(field: string): HTMLElement | HTMLInputElement | undefined {
|
||||||
|
const input = this.findElementBasedOnText(
|
||||||
|
{ text: field, selector: 'input, textarea, [contenteditable="true"], ion-select, ion-datetime' },
|
||||||
|
{ onlyClickable: false, containerName: '' },
|
||||||
|
);
|
||||||
|
|
||||||
|
if (input) {
|
||||||
|
return input;
|
||||||
|
}
|
||||||
|
|
||||||
|
const label = this.findElementBasedOnText(
|
||||||
|
{ text: field, selector: 'label' },
|
||||||
|
{ onlyClickable: false, containerName: '' },
|
||||||
|
);
|
||||||
|
|
||||||
|
if (label) {
|
||||||
|
const inputId = label.getAttribute('for');
|
||||||
|
|
||||||
|
return (inputId && document.getElementById(inputId)) || undefined;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Function to find element based on their text or Aria label.
|
* Function to find element based on their text or Aria label.
|
||||||
*
|
*
|
||||||
|
|
|
@ -422,7 +422,7 @@ export class TestingBehatRuntimeService {
|
||||||
async setField(field: string, value: string): Promise<string> {
|
async setField(field: string, value: string): Promise<string> {
|
||||||
this.log('Action - Set field ' + field + ' to: ' + value);
|
this.log('Action - Set field ' + field + ' to: ' + value);
|
||||||
|
|
||||||
const found = this.findField(field);
|
const found = TestingBehatDomUtils.findField(field);
|
||||||
|
|
||||||
if (!found) {
|
if (!found) {
|
||||||
return 'ERROR: No element matches field to set.';
|
return 'ERROR: No element matches field to set.';
|
||||||
|
@ -445,7 +445,7 @@ export class TestingBehatRuntimeService {
|
||||||
async fieldMatches(field: string, value: string): Promise<string> {
|
async fieldMatches(field: string, value: string): Promise<string> {
|
||||||
this.log('Action - Field ' + field + ' matches value: ' + value);
|
this.log('Action - Field ' + field + ' matches value: ' + value);
|
||||||
|
|
||||||
const found = this.findField(field);
|
const found = TestingBehatDomUtils.findField(field);
|
||||||
|
|
||||||
if (!found) {
|
if (!found) {
|
||||||
return 'ERROR: No element matches field to set.';
|
return 'ERROR: No element matches field to set.';
|
||||||
|
@ -459,19 +459,6 @@ export class TestingBehatRuntimeService {
|
||||||
return 'OK';
|
return 'OK';
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Find a field.
|
|
||||||
*
|
|
||||||
* @param field Field name.
|
|
||||||
* @returns Field element.
|
|
||||||
*/
|
|
||||||
protected findField(field: string): HTMLElement | HTMLInputElement | undefined {
|
|
||||||
return TestingBehatDomUtils.findElementBasedOnText(
|
|
||||||
{ text: field, selector: 'input, textarea, [contenteditable="true"], ion-select, ion-datetime' },
|
|
||||||
{ onlyClickable: false, containerName: '' },
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Get the value of a certain field.
|
* Get the value of a certain field.
|
||||||
*
|
*
|
||||||
|
|
Loading…
Reference in New Issue