3
votes

Comment boucler ce test avec différentes lignes csv?

Je suis débutant avec les tests de sélénium. J'ai écrit ce code et cela fonctionne, mais je dois boucler ce test avec une autre ligne csv.

J'ai passé près de 10 heures à essayer de faire ça.

Scénario de ce que j'essaie de faire:

  1. Le navigateur Web s'ouvre, allez à l'URL

  2. Connectez-vous avec les données du fichier CSV de la première ligne

  3. Le pilote redémarre et fait la même chose mais avec les données de la deuxième ligne du fichier csv.

J'ai également essayé de redémarrer le test avec aftermethod / afterclass mais cela ne fonctionne pas.

public class CSVdataread {
    private WebDriver driver;
    String baseUrl = "URL";
    String CSV_file = "C:\\Users\\xxxxxxxxxxx\\Desktop\\TestData.csv";

    @BeforeClass
    public void openBrowser() {
        System.setProperty("webdriver.chrome.driver", "C:\\Users\\xxxxxxxxxxxx\\Desktop\\webdriver\\chromedriver.exe");
        driver = new ChromeDriver();
        driver.navigate().to("URL");
        driver.manage().timeouts().implicitlyWait(30, TimeUnit.SECONDS);
    }

    @Test
    public void verify_Search() throws InterruptedException, IOException {
        CSVReader reader = new CSVReader(new FileReader(CSV_file));
        String[] cell;

        while((cell = reader.readNext()) != null) 
            for (int i = 0; i < 1; i++) {
                String name = cell[i];
                String email = cell[i + 1];
                String baseUrl = "http://xxxxx.xxx/xxxx/";
                driver.findElement(By.xpath("//input[@id='useridFormField-inputEl']")).sendKeys(name);
                driver.findElement(By.xpath("//input[@id='userpasswordFormField-inputEl']")).sendKeys(email);
                {
                    driver.quit();
                }
            }
        }
    } 


0 commentaires

3 Réponses :


1
votes

Votre boucle while semble interrompue. La boucle for à l'intérieur de la boucle while semble gâcher votre procédure de connexion.

while((cell = reader.readNext())!=null) { // iterate through csv file
  String name = cell[0]; // cell is current row, you need first column for name
  String email = cell[1]; // second column for email (as password?)
  // what do you want to do with baseUrl here?

  driver.findElement(By.xpath("//input[@id='useridFormField-inputEl']")).sendKeys(name);
  driver.findElement(By.xpath("//input[@id='userpasswordFormField-inputEl']")).sendKeys(email);

  // you need to check the successful login here
  // then logout and open main page
  // do not quit before you are finished 
}

// quit after the loop is finished
driver.quit();

Sans aucune connaissance du site Web, il est impossible de vous dire comment vérifier la connexion réussie et effectuer la déconnexion. P >

Puis-je vous suggérer de faire des efforts pour apprendre les ficelles du métier avec une tâche moins complexe? Vous semblez avoir beaucoup de problèmes avec les éléments Java de base. N'arrêtez jamais d'apprendre.


0 commentaires

1
votes

Il semble que vous souhaitiez itérer votre test avec un ensemble de données de test. Dans ce cas, vous devez utiliser la fonctionnalité TestNG fournisseur de données .

public class CSVdataread  extends WebDriverTestCase{

    @QAFDataProvider(dataFile="resources/user-data.csv")
    @Test()
    public void verify_Search(String name, String email) throws InterruptedException, IOException {
           String baseUrl = "http://xxxxx.xxx/xxxx/";
           getDriver().navigate().to(baseUrl);
           getDriver().findElement(By.xpath("//input[@id='useridFormField-inputEl']")).sendKeys(name);
           //another way of finding element...
           getDriver().findElement("xpath=//input[@id='userpasswordFormField-inputEl']").sendKeys(email);
     }
 } 

Vous pouvez également utiliser extension de fournisseur de données . Par exemple, avec qaf Vous n'avez pas besoin d'écrire du code pour la gestion des pilotes ou pour le fournisseur de données. Votre classe de test ressemblera à ceci:

public class CSVdataread {
    private WebDriver driver;
    String baseUrl = "URL";
    String CSV_file = "C:\\Users\\xxxxxxxxxxx\\Desktop\\TestData.csv";

    @BeforeMethod
    public void openBrowser() {
        System.setProperty("webdriver.chrome.driver", "C:\\Users\\xxxxxxxxxxxx\\Desktop\\webdriver\\chromedriver.exe");
        driver = new ChromeDriver();
        driver.manage().timeouts().implicitlyWait(30, TimeUnit.SECONDS);
    }

    @Test(dataProvider="users-data")
    public void verify_Search(String name, String email) throws InterruptedException, IOException {
           String baseUrl = "http://xxxxx.xxx/xxxx/";
           driver.navigate().to(baseUrl);
           driver.findElement(By.xpath("//input[@id='useridFormField-inputEl']")).sendKeys(name);
           driver.findElement(By.xpath("//input[@id='userpasswordFormField-inputEl']")).sendKeys(email);
     }
     //This method will provide data to any test method that declares that its Data Provider
     @DataProvider(name = "users-data")
     public Iterator<Object[]> createDataFromCSV() {
       CSVReader reader = new CSVReader(new FileReader(CSV_file));
       List<Object[]> data = new ArrayList<Object[]>();
       //read csv data to list
       return data.iterator();
    }

    @AfterMethod
    public void closeBrowser() {
        driver.quit();
    }

 } 


0 commentaires

0
votes

Solution JUnit 4. Celui-ci va être énorme ...

Commençons par CSVReader et quelques bonnes pratiques ainsi que la lisibilité du code. Dans votre test, vous lisez les données CSV et vous les utilisez dans vos tests. Il n'est pas de la responsabilité du test de lire les données. Le test doit déjà avoir toutes les données fournies. Il s'appelle DataProvider . Ce terme est en fait utilisé dans le framework de test TestNG , tout comme @ user861594 l'a suggéré.

Donc, vous devriez avoir quelque chose pour fournir des données à vos tests. Mais c'est déjà l'étape n ° 2. Puisque vous savez que vous lirez les données ligne par ligne à partir du fichier CSV, vous devez créer une classe appropriée pour lire les données à partir de CSV.

Voici un exemple:

@RunWith(Parameterized.class)
public class OurTest {
    private String login, password;

    public OurTest(String login, String password) {
        this.login = login;
        this.password = password;
    }

    @Parameterized.Parameters(name = "{index}: Login: ({0}) Password: ({1})")
    public static Collection<Object[]> data() throws FileNotFoundException {
        return new CSVDataProvider().getData();
    }

    @Test
    public void test() {
        System.out.println(String.format("login : %s | Password: %s", login, password));
    }
}


0 commentaires