Tengo texto condicional que cambiará y que no tiene muchas palabras similares. ¿Hay alguna forma de usar cssContainingText condicionalmente? Los documentos parecen indicar que solo se pueden usar valores de cadena o expresiones regulares, pero me preguntaba si había una solución.
El siguiente código es solo un ejemplo aproximado, pero con suerte pinta la imagen.
let text; if (a){ text = 'John Doe is a name'; } else if (b) { text = 'Hello world'; } else if (c) { text = 'This is a whole new sentence'; } else { text = 'Default text' } return <div className='my-text'>{text}</div>; element( by.cssContainingText( 'my-text', ["/*Insert logic for conditional*/", ], // even something like, 'text' || 'text-2' || 'text-3' ), );La opción más fácil es probablemente usar ExpectedConditions y simplemente esperar a que el elemento sea visible. Es decir, realice cualquier acción que haga que el texto cambie y luego espere a que ese elemento se vuelva visible en la página. Puede abordarlo de dos maneras, definir todos los elementos que espera que estén en la página o crear una función en la que pase el texto que está buscando y espere a que esté listo. Mis ejemplos a continuación asumen que ya ha definido EC y un tiempo de espera personalizado en otro lugar de la clase.
const someText = 'my sample text'; await waitForElementWithText(someText); // now do other stuff once element is visible .... async function waitForElementWithText(waitForText) { const elem = element(by.cssContainingText(waitFortext)); return browser.wait(EC.visibilityOf(elem), myWaitTime); }O si necesita interactuar con ese elemento después de esperarlo, simplemente declare el elemento y páselo a la función de espera
const elem1 = element(by.cssContainingText('my sample text'); const elem2 = element(by.cssContainingText('my other text'); // do some stuff that makes elem2 visible await waitForElementVisible(elem2); // now you can interact with elem2 ... async function waitForElementVisible(elem) { return browser.wait(EC.visibilityOf(elem), myWaitTime); }