1

Ich versuche eine einfache Vorrichtung zu schreiben, die den Browser öffnet und zu www.google.com navigiert. Wenn ich die Wiki-Seite benutze, passiert sie grün, aber der Browser öffnet sich nie (ich glaube nicht, dass die Methode sogar vom Wiki aufgerufen wird). Kann jemand mein Gerät und Wiki ansehen, um zu sehen, was ich falsch mache? Vielen Dank im Voraus,Fitnesse Wiki kann Selen Methode nicht korrekt aufrufen

ist die Wiki -

!|SeleniumFitness| 
    |URL     |navigateToSite?| 
    |http://www.google.com|    | 

Nach Laufen -

!|SeleniumFitnesse| java.lang.NoSuchMethodError: org.openqa.selenium.remote.service.DriverCommandExecutor.<init>(Lorg/openqa/selenium/remote/service/DriverService;Ljava/util/Map;)V 
|URL |The instance decisionTable_4.setURL. does not exist|navigateToSite? 
|http://www.google.com|!The instance decisionTable_4.navigateToSite. does not exist | 

Hier wird die Fixture -

package FitNesseConcept.fitNesse; 

import java.util.Properties; 

import org.junit.BeforeClass; 
import org.openqa.selenium.By; 
import org.openqa.selenium.WebDriver; 
import org.openqa.selenium.chrome.ChromeDriver; 
import org.testng.annotations.BeforeMethod; 

//import com.google.common.base.Preconditions.*; 
//import com.google.common.collect.Lists; 

import fit.ColumnFixture; 

public class SeleniumFitnesse extends ColumnFixture { 

public static ChromeDriver driver = null; 
private String navigateToSite = ""; 
public String URL = ""; 



    public SeleniumFitnesse() { 

    Properties props = System.getProperties(); 

    props.setProperty("webdriver.chrome.driver", "/home/ninad/eclipse-workspace/chromedriver"); 

    driver = new ChromeDriver(); 
    } 



// SET-GET Methods 

public String getURL() { 
    return URL; 
} 

public void setURL(String uRL) { 
    URL = uRL; 
} 

public String getNavigateToSite() { 
    return navigateToSite; 
} 

public void setNavigateToSite(String navigateToSite) { 
    this.navigateToSite = navigateToSite; 
} 

// Navigate to URL 

public void navigateToSite() throws Throwable { 
    System.out.println("Navigating to Website"); 

    try { 
     driver.navigate().to(URL); 
    } catch (Exception ex) { 
     ex.printStackTrace(); 
    } 

} 



} 
+0

Gibt es einen besonderen Grund, warum Sie Ihre eigene (noch eine) Selenium FitNesse Integration schreiben? Hast du die verfügbaren Plugins unter http://fitnesse.org/PlugIns#slimfixtures ausgecheckt? –

+0

Warum schreiben Sie eine Fit-Säulenleuchte, möchten Sie eine Form der Entscheidungstabelle erstellen? Wenn ich mir den Code und das Wiki anschaue, kann ich nicht ganz erkennen, was Sie von der Tabelle erwarten. Wenn Sie eine Tabelle verwenden möchten, um eine Reihe von Schritten (z. B. das Öffnen einer Seite) nacheinander auszuführen, würde ich empfehlen, zum Slim-Test-Runner zu wechseln und dessen Skript-Tabelle zu verwenden (http://fitnesse.org/FitNesse.FullReferenceGuide.UserGuide.WritingAcceptanceTests .SliM.ScriptTable). Ihr aktueller Code verwendet eine jUnit 'BeforeMethod'-Annotation, die nichts in einem FitNesse-Kontext bedeutet oder tut. –

+0

Vielen Dank für Ihre Antwort. Ich war mir der Slimfixture Plugins nicht bewusst. Kannst du mir Schritt für Schritt erklären, wie ich sie in mein Eclipse-Projekt importiere? Ist es so einfach wie eine Abhängigkeit von Maven hinzuzufügen? Wenn nicht, wo ist das Glas genau? Vielen Dank (fyi - ich bin Anfänger bis Mittelstufe bei all dem, ich bin an Gurke gewöhnt, aber die Firma, für die ich arbeite, will fitnesse). – noMoreMutants

Antwort

1

Sie sind ein paar gute Empfehlungen bekommen als Kommentare - aber um deine Frage direkt zu beantworten, für eine alte ColumnFixture, die du geschrieben hast, die ich thod "navigateToSite" wird in der Tat nicht aufgerufen.

Diese Stile von Fixtures werden nicht mehr oft verwendet, Slim wird bevorzugt, und Ihre fitness-Instanz in ihrer Dokumentation zeigt Ihnen, wie Slim Style zu verwenden ist. Wenn Sie jedoch für eine Spalten-Fixture, wie Sie es geschrieben haben, möchten, dass eine Methode aufgerufen werden soll, muss es ein "?" folgender Name der Methode in der Kopfzeile.

Siehe Grund docs für Spalte Aufnahme: http://fitnesse.org/FitNesse.UserGuide.FixtureGallery.BasicFitFixtures.ColumnFixture

Sie sind falsch mit Säulenbefestigung, obwohl die alten Stil gewährt. Das Muster der Spaltenbefestigung lautet "Hier ist eine Reihe von Spalten, die Eingaben darstellen, jetzt hier ist ein Methodenaufruf, den ich machen möchte, um die Ausgabe zu erhalten und das Ergebnis zu überprüfen". Das Navigieren auf einer Website passt oft nicht zu diesem Muster. Im alten Stil FitNesse es wahrscheinlich durch eine ActionFixture angefahren werden würde:

http://fitnesse.org/FitNesse.UserGuide.FixtureGallery.BasicFitFixtures.ActionFixture

Im neueren dünnen Art, eine gute Passform für die Navigation und Kontrolle, wo Sie wäre ein Szenario Tabelle ist.

http://www.fitnesse.org/FitNesse.UserGuide.WritingAcceptanceTests.SliM.ScenarioTable

Im Allgemeinen tun WebDriver/Selenium-Tests durch ein Wiki lohnt mich mehrere Gedanken darüber, ob es die beste Medium. Fitnesse ist wirklich ein kollaboratives Tool zum Dokumentieren und Verifizieren von Geschäftsanforderungen direkt gegen Quellcode.

Hier ist ein Beispiel dafür, wie mit einem ColumnFixture zu tun, obwohl ColumnFixture wieder nicht genau angemessen:

|url|navigateToUrl?| 
|www.google.com| | 

java class: 
public String url; 

public void navigateToUrl() { 
} 

Sie könnten eine „OK“ zurück, wenn es in Ordnung navigiert, oder den Titel der Seite zurückkehren, im Gegensatz stornieren, wenn du willst.

+0

Danke Jim, ich habe mein Wiki geändert um zu reflektieren die 'basic docs für column fixture' link, die du mir gegeben hast - ! | SeleniumFitnesse | | URL \t | navigateToSite? | | http: //www.google.com | \t Aber ich bekomme eine - Methode navigateToSite [0] nicht gefunden in FitNesseConcept.fitNesse.SeleniumFitnesse. Irgendwelche Ideen? – noMoreMutants

+0

Ja - Ihre Methode für navigateToSite wie in Code oben verwendet einen einzigen Eingabeparameter, der die URL ist - fitness versucht, eine Methode ohne Argumente aufzurufen. Versuche, dein Fixture im Wiki zu ändern, um die URL als separate Spalte zu übergeben, und erstelle dafür eine öffentliche Eigenschaft in deiner Fixture-Klasse. Also: | url | navigateToSite? |, Und "public string url;" in deiner Vorrichtungsklasse. Entfernen Sie den Eingabeparameter von der navigateToSite-Methode, und verweisen Sie stattdessen auf die URL-Eigenschaft. –

+0

Siehe bearbeitete Antwort zum Beispiel –

Verwandte Themen