どのように異なるのCSV行でループこのテストをしますか?

SQA:

私は、Seleniumテストで初心者です。私はこのコードを書いて、それが動作しますが、私は別のcsvラインでループにこのテストを必要とします。

私はこれをやろうとしている、ほぼ10時間を費やしました。

私がやろうとしています何のシナリオ:

  1. Webブラウザは、URLに移動しを開いています

  2. 最初の行からCSVファイルからのデータでログイン

  3. ドライバが再起動し、同じことを行うが、CSVファイルから二行目からのデータとされます。

私はまた、aftermethod / afterclassで再起動テストしようとしたが、それは働いていません。

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:

4溶液をJUnitの。この1は巨大になるだろう...

まずは、から始めましょうCSVReaderといくつかの良い習慣プラスコードの読みやすさ。あなたのテストでは、CSVデータを読み、あなたのテストでそれらを使用しています。これは、データを読み取るために、テストの責任ではありません。テストでは、すでに提供されているすべてのデータを持っている必要があります。それは呼ばれていますDataProviderこの用語は、実際に使用されているTestNGだけの提案user861594 @のように、フレームワークをテストします。

だから、あなたは、あなたのテストにデータを提供するために何かを持っている必要があります。しかし、これは既に#2ステップ。あなたはCSVファイルからデータ行ごとに読み込みます知っているので、あなたはCSVからデータを読み取るために適切なクラスを作成する必要があります。

ここでは例を示します。

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

CSVReaderコンストラクタは受け入れFile引数として、特定の方法でデータを読み取るために適切なオブジェクトを作成する(例:として読み取りますString)。次に、CSVファイルのデータは、後で使用するためにメモリ内の行を保存することで、普通のTXTファイルのように、読まれます。

その後、我々は2つの方法を作成します。最初は、getRowCount私たちのデータの行/セットの合計数を与えます。

第二は、getRowリストから特定の行を収集しているとそれを保存しString[]、後で使用するためのアレイ。

String[] 配列は、1つのExcelの行のようなプレゼンテーションを持っています:

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

私たちは、私たちは容易なことでファイルを読み込むことができますクラスを持っています。さんが作成してみましょうDataProvider

テストにデータを提供するために、我々は、使用する必要が@Parameters注釈とリターンをCollection<Object[]>我々のテストに。私はそれについて後でお話します。

それでは、私たちにそれを実装しましょう 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);
    }
}

私は、CSVファイルでのみログインとパスワードを持っていることを前提としています。私は2次元配列を作成した理由ですnew Object[rowCount][2]我々は、それが店に持っているどのように多くの要素を提供することで、配列を作成し、我々は我々が持っているから、どのように多くの行を知っているrowCount変数。2つの手段は、我々は、行あたりわずか2のデータを持っています。ログインとパスワードを入力します。あなたは、たとえば、追加の要素を使用したい場合は-ユーザーの役割を、あなたがに変更することができます[3]

forループ我々は、配列にCSVファイルからデータを変換しているし、後で使用するためにそれを返します。

今、私たちのテストクラスについての話をしましょう。

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

パラメータを渡すためにDataProvider我々のテストのために、我々は持つクラス1注釈する必要がある@RunWith(Parameterized.class) 。2.返すメソッドを作成Collection<Object[]> with annotation私たちが受け入れるかの種類のデータの何反映コンストラクタを作成します。3. Parameters` @を。

私は2引数のコンストラクタを作成した理由はポイント3に関しては、それだString loginString password私たちは、これらの2つのパラメータを渡しています。JUnitは、新しいインスタンスを作成しOurTest、各試験のために異なる行を渡します。

ではtestこの方法私はちょうど私たちが持っているからデータを印刷しますDataProvider

私はあなたがこの特定のアプローチを学ぶために、あなたのテストを調整するために試してみたいので、私は完全に動作する解決策を提示していません。それはまた呼ばれていますData-driven Testing

私たちは、1試験方法を持っていますが、CSVファイルの各行は、別のテストとして実行されます。

それが役に立てば幸い!

おすすめ

転載: http://43.154.161.224:23101/article/api/json?id=98943&siteId=1