11

Indipendentemente da ciò che faccio Non riesco a far funzionare lo stato di hover con i test del goniometro. Il seguente codice è semi funzionale ..Modifica dello stato del hover con il rapportatore

  • funziona bene in Firefox
  • Funziona solo quando ho scorrere l'area in vista con Chrome.
  • non riesce in 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); 
      }); 
     }); 

risposta

1

Soluzione 1:

basta usare un semplice funzione hover per l'oggetto

<!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>

Possibile Soluzione 2:

Prova questa versione con waitForAngular(); potrebbe essere necessario attendere per angolare:

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); 
      }); 
     }); 

Possibile Soluzione 3:

Sostituire .mouseMove(obj) con .mouseMove(browser.findElement(protractor.B.id('foo'))) e adattarlo alle proprie codice

+0

Questa pagina non utilizza nessuno Angolare –

+0

Ok ... si potrebbe quindi utilizzare la prima soluzione o integrare '.monmouseover' e' .onmouseout' nella funzione corrente invece di '.mouseMove' ... in qualsiasi modo questo problema sembra essere noto per il goniometro https://github.com/angular/protractor/issues/159 – intika

+0

Giusto, ma ciò richiederebbe a JS di fare tutto ciò che fa il CSS, che è un non-iniziatore –

3

Abbiamo incontrato qualcosa di simile di recente.

Quello che ci ha aiutato è stato quello di attesa per un elemento di avere un valore CSS specifico utilizzando browser.wait():

function waitForCssValue (elementFinder, cssProperty, cssValue) { 
    return function() { 
     return elementFinder.getCssValue(cssProperty).then(function (actualValue) { 
      return actualValue === cssValue; 
     }); 
    }; 
}; 

Usage:

browser.wait(waitForCssValue(obj, 'color', color2), 5000); 

Qui, siamo fondamentalmente in attesa fino a 5 secondi per un valore CSS color uguale a color2. Applica la chiamata di attesa subito dopo il passaggio del mouse sull'elemento.


Inoltre, mi ricordo di avere quella scorrimento in vista aiutato a risolvere i problemi simili su SO:

browser.executeScript("arguments[0].scrollIntoView();", obj); 

finestra del browser Massimizzare può anche aiutare, di solito facciamo in onPrepare():

onPrepare: function() { 
    browser.driver.manage().window().maximize(); 
}, 

Nota aggiuntiva su PhantomJS:

Prima di tutto, gli sviluppatori goniometro consigliabile evitare di eseguire protrator test end-to-end con PhantomJS:

Nota: Si consiglia di non utilizzare PhantomJS per le prove con goniometro. Ci sono molti problemi segnalati con PhantomJS che si interrompe e si comporta in modo diverso dai browser reali.

A parte questo, si veda:

Qui sto cercando di arrivare al punto, che si dovrebbe sacrificare il "non riesce a Phantom JS" argomento.

+0

Ho provato il 'browser .executeScript', ma non funziona; Qualche trucco? –

+0

@KirkStrobeck grazie per aver provato! Quali sono i sintomi, vedi che l'elemento si focalizza e si libra nel browser? Qualche errore? Hai provato l'approccio "wait"? – alecxe

Problemi correlati