2016-09-07 7 views
1

Mit Java versuche ich eine allgemeine Überprüfung für einen bestimmten Text auf jeder Seite in einer Webanwendung, die vorhandene Tests besuchen, zu schreiben. Anstatt es auf jeder einzelnen Seite einzeln schreiben zu müssen, ist es möglich, an einer Stelle auf einer hohen Ebene zu arbeiten (möglicherweise in der Basisklasse)?Textüberprüfung auf jeder Seite (Selenium)

public class BaseClassForUiTest { 
       public BaseClassForUiTest() { 
         ... 
       } 

       public void test() throws Exception { 
         boolean isNewPage = checkIfNewPage(); 
         if (isNewPage) 
          // perform a text check on the page 
       } 
} 

Jeder Test erstreckt sich von BaseClassForUiTest und überschreibt die test() Methode.

Antwort

1

Anstatt es auf jeder einzelnen Seite einzeln schreiben zu müssen, ist es möglich, an einer Stelle auf einer hohen Ebene (möglicherweise in der Basisklasse) zu tun?

Ja, ist es möglich, durch WebDriverEventListener in BaseClassForUiTest Implementierung und Event-Handler-Methoden überschreiben die entsprechenden WebDriver Ereignisse Handhabung nach an einem Ort müssen.

Here Jede Methode entspricht einem Ereignis. Entsprechend Ihrer Anforderung müssen Sie mit der Methode afterNavigateTo() umgehen. Dieser wird jedes Mal aufgerufen, wenn die Navigation zu einer Seite abgeschlossen ist.

Sie müssen eine Textüberprüfung des Seitencodes in dieser Methode durchführen, damit Ihr Code jedes Mal ausgeführt wird, wenn die Seite zu einer anderen Seite navigiert.

public class BaseClassForUiTest implements WebDriverEventListener 
{ 

     --------- 
     --------- 

     public void afterNavigateTo(String arg0, WebDriver arg1) { 
    // perform desire text checker stuff on the page here 
    } 
} 

Jetzt Event erstellen Werfen WebDriver Ihren Test auszuführen: -

  • erstellen regelmäßig WebDriver.

    FirefoxDriver driver = new FirefoxDriver(); 
    
  • Jetzt ein EventThrowingWebDriver mit unserem regelmäßigen WebDriver oben erstellt erstellen.

    EventFiringWebDriver eventDriver = new EventFiringWebDriver(driver); 
    
  • eine Instanz Ihrer eventHandler Klasse erstellen und es für Ereignisse registrieren über die Registermethode EventFiringWebDriver Objekt erstellt, wie oben: -

    BaseClassForUiTest handler = new BaseClassForUiTest(); 
    eventDriver.register(handler); 
    

Vollcode: -

import org.openqa.selenium.support.events.EventFiringWebDriver; 

public class BaseClassForUiTest { 

public void test() throws Exception {    

     FirefoxDriver driver = new FirefoxDriver(); 
     EventFiringWebDriver eventDriver = new EventFiringWebDriver(driver); 

     BaseClassForUiTest handler = new BaseClassForUiTest(); 
    eventDriver.register(handler); 

     eventDriver.get("your url"); 

     //Now do your further stuff 
} 
} 
+0

Thanks Saurabh tun. Das ist gutes Zeug. In allen Tests verwenden wir jedoch keine driver.get (URL). Stattdessen klicken wir auf Links und Schaltflächen, die wiederum die Navigation übernehmen. Können diese generisch auf Basisklassenebene erfasst werden, um eines der von WebDriverEventListener angebotenen Ereignisse zu generieren? – naspras

+0

Ja, es gibt mehrere Methoden, die auf jedem Link Link bei der Navigation der Seite auftreten können, müssen Sie es implementieren, ich bin sicher, es wird Ihr Problem lösen. Danke .. :) –

+1

Sie haben Recht. Ich kann die Methode afterClickOn() verwenden. Vielen Dank! – naspras

0

Für mich sollten Sie eine separate Testklasse für diese Prüfung mit Parameterized or JUnitParams erstellen und geben Sie eine URLs, wo als Parameter ausgeführt werden, aber es hängt davon ab, was ist Ihre übliche Vorgehensweise zum Ausführen von Tests (wir führen alle Testpack zur gleichen Zeit, so ist es eine Lösung für uns in dieser Situation). Auch es scheint wie gut-logisch getrennte Lösung

Wenn Sie diese Überprüfung als Assertion verwenden möchten, können Sie Ihren aktuellen Code für diesen Fall neu schreiben und dafür in @Before Block aufrufen (aber es ist immer noch nicht eine gute Lösung, meiner Meinung nach)

+0

Danke. Die URLs sind alle dynamische URLs und daher ist es unmöglich, einen parametrisierten Test mit URLs zu definieren. – naspras

+0

Ich bin damit einverstanden, dies als eine Vorher-Überprüfung Behauptung, aber wie das zu tun? Wie kann ich Selenium bitten, eine neue Seitenladung zu identifizieren? – naspras

+0

Wenn Sie es in '@ Before' testclass tun möchten, fügen Sie einfach eine entsprechende Assertion hinzu. Aber wenn du das nach dem Reload der Seite während der Tests machen willst (auch mitten drin) - nur ein paar schmutzige Hacks können in diesem Fall helfen, denke ich = \ –