javascript - example - Probar el estado de vuelo estacionario con el transportador
protractor vs selenium (2)
No importa lo que haga, no puedo activar el estado de vuelo estacionario con pruebas de transportador. El siguiente código es semi funcional ..
- Funciona bien en Firefox
- Solo funciona cuando desplazo el área a la vista con Chrome.
- Falla en Phantom JS
obj
.getCssValue(''color'')
.then(function (color1) {
browser
.actions()
.mouseMove(obj)
.perform()
.then(function () {
obj
.getCssValue(''color'')
.then(function (color2) {
expect(color1)
.not
.toEqual(color2);
});
});
Solución 1:
Simplemente use una función de desplazamiento simple para su objeto
<!DOCTYPE html>
<html>
<body>
<p onmouseover="colorin(this)" onmouseout="colorout(this)">
Testing colorin and colorout function for mouse hover
</p>
<script>
function colorout(x) {
x.style.color = "#000000";
}
function colorin(x) {
x.style.color = "#7FAF00";
}
</script>
</body>
</html>
Posible solución 2:
Pruebe esta versión con waitForAngular (); Es posible que deba esperar por angular:
obj
.getCssValue(''color'')
.then(function (color1) {
browser.waitForAngular();
browser
.actions()
.mouseMove(obj)
.perform()
.then(function () {
obj
.getCssValue(''color'')
.then(function (color2) {
expect(color1)
.not
.toEqual(color2);
});
});
Posible solución 3:
Reemplazar .mouseMove(obj)
con .mouseMove(browser.findElement(protractor.B.id(''foo'')))
y adaptarlo a su código
Nos encontramos con algo similar recientemente.
Lo que nos ayudó fue esperar a que un elemento tenga un valor de CSS específico usando browser.wait()
:
function waitForCssValue (elementFinder, cssProperty, cssValue) {
return function () {
return elementFinder.getCssValue(cssProperty).then(function (actualValue) {
return actualValue === cssValue;
});
};
};
Uso:
browser.wait(waitForCssValue(obj, ''color'', color2), 5000);
Aquí, básicamente esperamos hasta 5 segundos para que un valor de color
CSS sea igual a color2
. Aplique la llamada de espera justo después de pasar el elemento.
Además, recuerdo que el hecho de desplazarse a la vista ayudó a resolver problemas similares en SO:
browser.executeScript("arguments[0].scrollIntoView();", obj);
Maximizar la ventana del navegador también puede ayudar, generalmente lo hacemos en onPrepare()
:
onPrepare: function () {
browser.driver.manage().window().maximize();
},
Nota adicional sobre PhantomJS
:
Antes que nada, los desarrolladores de transportadores recomiendan no ejecutar las protrator
extremo a extremo de los PhantomJS
con PhantomJS
:
Nota: Recomendamos no utilizar PhantomJS para las pruebas con transportador. Hay muchos problemas informados con PhantomJS estrellándose y comportándose de manera diferente a los navegadores reales.
Aparte de eso, mira:
Aquí trato de ir al grano, de que debes sacrificar el argumento "Fails in Phantom JS".