python - locators - Condiciones esperadas en transportador
protractor vs selenium (3)
En Protractor puedes usar
browser.wait(fn, timeout)
.
Ejemplo:
var element = by.id(''myDynamicElement'');
browser.wait(function() {
return ptor.isElementPresent(element);
}, 10000);
expect(ptor.isElementPresent(element)).toBeTruthy();
Mientras escribía las pruebas de selenio en Python, me acostumbré a usar Esperas explícitas mucho para esperar a que se cargue una página, o para esperar que un elemento sea visible, o haga clic, etc.
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
element = WebDriverWait(driver, 10).until(
EC.presence_of_element_located((By.ID, "myDynamicElement"))
)
El concepto clave aquí es proporcionar una Condición esperada para esperar, hay varios tipos:
El uso de condiciones esperadas hace que el código sea más limpio y más confiable en comparación con el uso de
sleep
con intervalos de tiempo codificados.
Ahora, estamos cambiando nuestra infraestructura de prueba de extremo a extremo a
protractor
mucho.
¿Existen
Expected Conditions
similares en el transportador que hay en
python-selenium
o
java-selenium
?
Si no, ¿cuál es la forma canónica de esperar explícitamente una condición en el
protractor
?
He revisado la documentación del transportador y no he encontrado nada al respecto.
Una vez que la github.com/angular/protractor/pull/1703 está en (probablemente el transportador 1.7), puede hacer:
var EC = protractor.ExpectedConditions;
var e = element(by.id(''xyz''));
browser.wait(EC.presenceOf(e), 10000);
expect(e.isPresent()).toBeTruthy();
Sin embargo, tenga en cuenta que si está trabajando con una aplicación Angular y su prueba requiere estas esperas condicionales, es una gran señal de alerta para lo que está haciendo, ya que el transportador debe manejar las esperas de forma nativa.
waitForControlVisible(locator: string, timeout: number) {
try {
const element = this.findElement(locator);
const condition = browser.ExpectedConditions;
browser.wait(condition.visibilityOf(element), timeout);
} catch (e) {
console.log(e.message);
console.error(''Control not visible.'', e);
}
}
Tal vez te ayude, espera la visibilidad del elemento en DOM.