1

J'essaie d'écrire un appareil simple qui ouvre le navigateur et navigue vers www.google.com. Quand je lance la page wiki, elle passe avec tout le vert, mais le navigateur ne s'ouvre jamais (je ne pense pas que la méthode soit même appelée par le wiki). Quelqu'un peut-il jeter un oeil à mon appareil et au wiki pour voir ce que je fais de mal? Un grand merci à l'avance,Fitnesse wiki incapable d'appeler la méthode sélénium correctement

Voici le Wiki -

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

après l'exécution -

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

Voici la 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

Avez-vous une raison particulière d'écrire votre propre (et une autre) intégration de Selenium FitNesse? Avez-vous vérifié les plugins disponibles sur http://fitnesse.org/PlugIns#slimfixtures? –

+0

Pourquoi écrivez-vous un montage de colonne Fit, voulez-vous créer une forme de table de décision? Quand je regarde le code et le wiki, je n'arrive pas à comprendre ce que vous attendez de la table. Lorsque vous souhaitez utiliser une table pour effectuer un certain nombre d'étapes (comme l'ouverture d'une page) de manière séquentielle, je vous recommande de passer au coureur de test Slim et d'utiliser sa table de script (http://fitnesse.org/FitNesse.FullReferenceGuide.UserGuide.WritingAcceptanceTests .SliM.ScriptTable). Votre code actuel utilise une annotation jUnit 'BeforeMethod', ce n'est pas quelque chose qui signifie ou fait quoi que ce soit dans un contexte FitNesse. –

+0

Merci pour votre réponse. Je n'étais pas au courant des plugins slimfixture. Pouvez-vous m'indiquer étape par étape comment les importer dans mon projet eclipse. Est-ce aussi simple que d'ajouter une dépendance maven? Sinon, où est le pot exactement? Un grand merci (fyi - je suis débutant à intermédiaire avec tout ça, je suis habitué au concombre, mais la compagnie pour laquelle je travaille veut de l'ajustement). – noMoreMutants

Répondre

1

Vous obtenez quelques bonnes recommandations commentaires - mais pour répondre directement à votre question, pour un ColumnFixture à l'ancienne, qui est ce que vous avez écrit, le moi thod "navigateToSite" ne va en effet pas être appelé.

Ces styles d'appareils ne sont plus souvent utilisés, Slim est préféré, et votre instance de fitnesse dans sa documentation vous montrera comment utiliser le style Slim. Cependant, pour un montage de colonnes comme vous l'avez écrit, si vous voulez qu'une méthode soit appelée, elle doit être "?" suivant le nom de la méthode dans la ligne d'en-tête.

Voir docs de base pour la fixation de la colonne: http://fitnesse.org/FitNesse.UserGuide.FixtureGallery.BasicFitFixtures.ColumnFixture

Vous mis-en utilisant la colonne de fixation, même donné le droit l'ancien style bien. Le motif de la colonne est "voici une série de colonnes qui représentent les entrées, maintenant voici un appel de méthode que je veux faire pour obtenir la sortie et vérifier le résultat". La navigation sur un site Web ne correspond pas souvent à ce modèle. Dans un style ancien FitNesse il serait probablement approché par un ActionFixture:

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

Dans le style plus récent Slim, un bon ajustement pour la navigation et le contrôle où vous êtes serait une table de scénario.

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

En faisant des tests généraux WebDriver/Sélénium par un wiki vaut pensée supplémentaire pour que ce soit le meilleur moyen. Fitnesse est vraiment conçu pour être un outil de collaboration pour la documentation et la vérification des exigences de l'entreprise, directement par rapport au code source.

Voici un exemple de la façon de le faire avec un ColumnFixture, bien qu'encore une fois ColumnFixture pas exactement le cas:

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

java class: 
public String url; 

public void navigateToUrl() { 
} 

Vous pouvez retourner un « OK » si elle navigue bien, ou retourner le titre de la page par opposition annuler si vous le vouliez.

+0

Merci Jim, j'ai changé mon wiki pour refléter le lien 'Documents de base pour le montage de colonnes' que vous m'avez donné - ! | SeleniumFitnesse | | URL \t | navigateToSite? | | http: //www.google.com | \t Mais j'obtiens un - Méthode navigateToSite [0] introuvable dans FitNesseConcept.fitNesse.SeleniumFitnesse. Des idées? – noMoreMutants

+0

Oui - votre méthode pour navigateToSite comme dans le code ci-dessus prend un seul paramètre d'entrée, qui est l'URL - fitnesse essaie d'appeler une méthode sans argument. Essayez de changer votre appareil sur le wiki pour passer l'URL en tant que colonne séparée, et créez une propriété publique sur votre classe d'appareils pour cela. Donc: | url | navigateToSite? |, Et "public string url;" sur votre classe de luminaire. Supprimez le paramètre parm de la méthode navigateToSite et faites référence à la propriété url. –

+0

Voir la réponse éditée par exemple –