2017-07-17 2 views
0

Ich habe folgenden Code (basierend auf this) in meiner benutzerdefinierten Schritt Definition:Wie bewerten Sie Javascript-Code von Behat zu Selenium richtig?

$js = <<<JS 

    function checkVisibility(elm, evalType) { 
     evalType = evalType || "visible"; 

     var vpH = jQuery(window).height(), // Viewport Height 
      st = jQuery(window).scrollTop(), // Scroll Top 
      y = jQuery(elm).offset().top, 
      elementHeight = jQuery(elm).height(); 

     if (evalType === "visible") return ((y < (vpH + st)) && (y > (st - elementHeight))); 
     if (evalType === "above") return ((y < (vpH + st))); 
    } 

    var el = document.querySelector("$locator"); 
    return checkVisibility(el, "visible"); 
JS; 


    $result = $this->getSession()->evaluateScript($js); 

ähnlicher Code funktioniert gut in Chromkonsole, aber in Behat Kontext $result ist immer null.

Ich benutze Behat: 3.0.15 mit Selen 3.4 und PhantomJS als Browser.

Im Allgemeinen scheint es, dass, wenn ich einen einzeiligen Code übergebe, es ok arbeitet. Egal, was in meiner Funktion ist, ich habe immer null, so unten Code auch mit null ergeben:

$js = <<<JS 

    function checkVisibility() { 
     return true; 
    } 

    // var el = document.querySelector("$locator"); 
    return checkVisibility(); 
JS; 
+0

Warum gerade nicht 'isVisible' Methode? hast du es versucht und funktioniert nicht? – lauda

Antwort

1

ich so etwas wie unten, das funktioniert:

$js = <<<JS 

    (function myFunction() { 
     //function content 
    })() 
JS; 

Sie für das Element warten soll, bevor Sie sicherstellen, dass das Element sichtbar ist.

Auch die Antwort bekommen Sie so etwas wie haben sollte:

$result = $this->getSession()->evaluateScript("return $js"); 
+0

Und wenn Sie 'return true' auf' myFunction() 'setzen, erhalten Sie' '' auch auf PHP? – drupality

+0

Ja, ich bekomme in PHP auch 'true'. Ich benutze Seitenobjekte und ich habe etwas wie $ this-> getDriver() -> evaluateScript ("return $ function"); 'in einem Seitenobjekt. – lauda

+0

Es ist also etwas falsch mit meiner Umgebung. In meinem Fall ist '$ result' immer' null':/Verwenden Sie phantomjs als Browser? – drupality

Verwandte Themen