Como fazer um loop este teste com a linha CSV diferente?

SQA:

Eu sou novato com testes de selênio. Eu escrevi este código e ele funciona, mas eu preciso laço este teste com outra linha CSV.

Passei quase 10 horas tentando fazer isso.

Cenário do que estou tentando fazer:

  1. O navegador está abrindo ir para url

  2. o login com os dados do arquivo CSV de primeira linha

  3. Motorista está reiniciando e fazer o mesmo, mas com dados de segunda linha do arquivo CSV.

Eu também tentei teste reiniciar com aftermethod / afterclass mas ele não está funcionando.

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();
                }
            }
        }
    } 
Fenio:

JUnit4 solução. Este vai ser enorme ...

Primeiro, vamos começar com CSVReadere algumas boas práticas mais legibilidade do código. Em seu teste, você leu dados CSV e usá-los em seus testes. Não é responsabilidade do teste para dados de leitura. O teste já deve ter todos os dados fornecidos a ele. É chamado DataProvider. Este termo é realmente usado em TestNGtestes quadro, assim como @ user861594 sugeriu.

Assim, você deve ter algo a fornecer dados para seus testes. Mas isso já Etapa # 2. Desde que você sabe que você vai ler linha por linha de dados a partir do arquivo CSV, você deve criar uma classe adequada para ler os dados de CSV.

Aqui está um exemplo:

public class CSVReader {
    private static final String DEFAULT_SEPARATOR = ",";
    private BufferedReader reader;
    private List<String> lines;

    public CSVReader(File file) throws FileNotFoundException {
        this.reader = new BufferedReader(new FileReader(file));

        lines = this.reader.lines().collect(Collectors.toList());
    }

    public String[] getRow(int rowNumber) {
        return lines.get(rowNumber).split(DEFAULT_SEPARATOR);
    }

    public int getRowCount() {
        return lines.size();
    }
}

O CSVReaderconstrutor aceita um Filecomo um argumento e cria objetos próprios para ler dados de um modo específico (por exemplo: ler como String). Em seguida, os dados no arquivo CSV é lido, assim como no arquivo TXT normal, salvando as linhas na memória para uso posterior.

Então criamos 2 métodos. Primeiro é getRowCounto que nos dá o número total de linha / conjunto de dados.

O segundo é getRowque recolher a linha específica da lista e poupa a String[]matriz para uso posterior.

String[] matriz tem uma apresentação como uma fileira Excel:

data index 0 | data index 1 | data index 2 | data index 3

Nós temos uma classe que nos permite ler o arquivo em uma questão fácil. Vamos criar oDataProvider

Para fornecer dados para testes, precisamos usar @Parametersanotação e retorno Collection<Object[]>para o nosso teste. Vou falar mais tarde sobre isso.

Então, vamos implementá-lo em nossa DataProvider

public class CSVDataProvider {

    public Collection<Object[]> getData() throws FileNotFoundException {
        CSVReader reader = new CSVReader(new File("C:\\Users\\xxxxxxxxxxx\\Desktop\\TestData.csv"));
        int rowCount = reader.getRowCount();
        Object[][] data = new Object[rowCount][2];

        for (int i = 0; i < rowCount; i++) {
            Object[] singleRow = reader.getRow(i);
            data[i][0] = singleRow[0];
            data[i][1] = singleRow[1];
        }

        return Arrays.asList(data);
    }
}

Presumo que você tem apenas logins e senhas no arquivo CSV. É por isso que eu criei uma matriz de 2 dimensões new Object[rowCount][2]. Nós criar a matriz, fornecendo quantos elementos tem a loja e sabemos quantas linhas temos de rowCountvariável. 2 significa que temos apenas 2 dados por linha. Login e senha. Se você quiser usar elemento adicional, por exemplo - o papel do usuário, você pode modificar a[3]

No forcircuito estamos transformando os dados do arquivo CSV para array e devolvê-lo para uso posterior.

Agora, vamos falar sobre a nossa classe de teste.

@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));
    }
}

A fim de passar os parâmetros a partir DataProviderde nosso teste, precisamos 1. Anotar a classe com @RunWith(Parameterized.class) 2. Crie um método retornar Collection<Object[]> with annotation@ Parameters` 3. Crie um construtor que reflete o tipo de dados que aceitamos.

Em relação ao ponto 3, é por isso que eu criei um construtor 2 discussão com String logine String password. Estamos passando esses 2 parâmetros. JUnit irá criar uma nova instância OurTeste passar linha diferente para cada teste.

No testmétodo que acabou de imprimir os dados que temos doDataProvider

Eu não apresentar uma solução totalmente funcional, porque eu quero que você tente ajustar o seu teste para aprender esta abordagem específica. É também chamado Data-driven Testing.

Temos apenas 1 método de teste, mas cada linha no arquivo CSV será executado como um teste separado.

Espero que ajude!

Acho que você gosta

Origin http://43.154.161.224:23101/article/api/json?id=98942&siteId=1
Recomendado
Clasificación