第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問(wèn)題,去搜搜看,總會(huì)有你想問(wèn)的

如何用不同的 csv 行循環(huán)這個(gè)測(cè)試?

如何用不同的 csv 行循環(huán)這個(gè)測(cè)試?

瀟瀟雨雨 2022-10-12 10:56:13
我是硒測(cè)試的初學(xué)者。我寫(xiě)了這段代碼,它可以工作,但我需要用另一個(gè) csv 行循環(huán)這個(gè)測(cè)試。我花了將近 10 個(gè)小時(shí)試圖做到這一點(diǎn)。我正在嘗試做的場(chǎng)景:網(wǎng)絡(luò)瀏覽器正在打開(kāi) go to url從第一行使用 CSV 文件中的數(shù)據(jù)登錄驅(qū)動(dòng)程序正在重新啟動(dòng)并執(zhí)行相同的操作,但使用 csv 文件中第二行的數(shù)據(jù)。我還嘗試使用 aftermethod/afterclass 重新啟動(dòng)測(cè)試,但它不起作用。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();                }            }        }    } 
查看完整描述

3 回答

?
忽然笑

TA貢獻(xiàn)1806條經(jīng)驗(yàn) 獲得超5個(gè)贊

JUnit 4 解決方案。這個(gè)會(huì)很大。。。


首先,讓我們從CSVReader一些好的實(shí)踐和代碼可讀性開(kāi)始。在您的測(cè)試中,您讀取 CSV 數(shù)據(jù)并在測(cè)試中使用它們。讀取數(shù)據(jù)不是測(cè)試的責(zé)任。測(cè)試應(yīng)該已經(jīng)提供給它的所有數(shù)據(jù)。它被稱為DataProvider。這個(gè)術(shù)語(yǔ)實(shí)際上是在TestNG測(cè)試框架中使用的,就像@user861594 建議的那樣。


因此,您應(yīng)該有一些東西可以為您的測(cè)試提供數(shù)據(jù)。但這已經(jīng)是第 2 步了。由于您知道您將從 CSV 文件中逐行讀取數(shù)據(jù),因此您應(yīng)該創(chuàng)建一個(gè)適當(dāng)?shù)念悂?lái)從 CSV 中讀取數(shù)據(jù)。


這是一個(gè)例子:


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

    }

}

構(gòu)造CSVReader函數(shù)接受 aFile作為參數(shù)并創(chuàng)建適當(dāng)?shù)膶?duì)象以以特定方式讀取數(shù)據(jù)(例如: read as String)。然后,讀取 CSV 文件中的數(shù)據(jù),就像在普通 TXT 文件中一樣,將行保存在內(nèi)存中以備后用。


然后我們創(chuàng)建2個(gè)方法。首先是getRowCount它給了我們行/數(shù)據(jù)集的總數(shù)。


其次是getRow從列表中收集特定行并將其保存到String[]數(shù)組中以備后用。


String[]數(shù)組有一個(gè)類似 1 Excel 行的演示文稿:


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

我們有一個(gè)類可以讓我們輕松讀取文件。讓我們創(chuàng)建DataProvider


為了向測(cè)試提供數(shù)據(jù),我們需要使用@Parameters注解并返回Collection<Object[]>到我們的測(cè)試。我稍后會(huì)談到這一點(diǎn)。


所以,讓我們?cè)谖覀兊腄ataProvider

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

    }

}

我假設(shè)您在 CSV 文件中只有登錄名和密碼。這就是我創(chuàng)建二維數(shù)組的原因new Object[rowCount][2]。rowCount我們通過(guò)提供它必須存儲(chǔ)的元素?cái)?shù)量來(lái)創(chuàng)建數(shù)組,并且我們知道變量中有多少行。2 表示我們每行只有 2 個(gè)數(shù)據(jù)。登錄名和密碼。如果你想使用額外的元素,例如 - 用戶的角色,你可以修改為[3]


在for循環(huán)中,我們將數(shù)據(jù)從 CSV 文件轉(zhuǎn)換為數(shù)組并將其返回以供以后使用。


現(xiàn)在,讓我們談?wù)勎覀兊臏y(cè)試類。


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

    }

}

為了將參數(shù)傳遞DataProvider給我們的測(cè)試,我們需要 1. 用注釋類@RunWith(Parameterized.class) 2. 創(chuàng)建一個(gè)返回 @Parameters 的方法Collection<Object[]> with annotation3. 創(chuàng)建一個(gè)構(gòu)造函數(shù)來(lái)反映我們接受什么樣的數(shù)據(jù)。


關(guān)于第 3 點(diǎn),這就是為什么我用String loginand創(chuàng)建了一個(gè) 2 參數(shù)構(gòu)造函數(shù)String password。我們正在傳遞這兩個(gè)參數(shù)。OurTestJUnit 將為每個(gè)測(cè)試創(chuàng)建一個(gè)新實(shí)例并傳遞不同的行。


在test我剛剛打印的方法中,我們從DataProvider


我沒(méi)有提供一個(gè)完全有效的解決方案,因?yàn)槲蚁M銍L試調(diào)整你的測(cè)試來(lái)學(xué)習(xí)這種特定的方法。它也被稱為Data-driven Testing。


我們只有一種測(cè)試方法,但 CSV 文件中的每一行都將作為單獨(dú)的測(cè)試運(yùn)行。


希望能幫助到你!


查看完整回答
反對(duì) 回復(fù) 2022-10-12
?
白板的微信

TA貢獻(xiàn)1883條經(jīng)驗(yàn) 獲得超3個(gè)贊

看起來(lái)你想用一組測(cè)試數(shù)據(jù)迭代你的測(cè)試。在這種情況下,您應(yīng)該使用 TestNG數(shù)據(jù)提供程序功能。


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

    }


 } 


您還可以利用可用的 data-provider-extension。例如,使用 qaf 您無(wú)需為驅(qū)動(dòng)程序管理或數(shù)據(jù)提供者編寫(xiě)代碼。您的測(cè)試類將如下所示:


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

     }

 } 


查看完整回答
反對(duì) 回復(fù) 2022-10-12
?
HUH函數(shù)

TA貢獻(xiàn)1836條經(jīng)驗(yàn) 獲得超4個(gè)贊

你的 while 循環(huán)看起來(lái)壞了。while 循環(huán)中的 for 循環(huán)似乎弄亂了您的登錄過(guò)程。


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

如果不了解網(wǎng)站,就不可能告訴您如何檢查成功登錄和執(zhí)行注銷。


我可以建議您花一些精力來(lái)學(xué)習(xí)不太復(fù)雜的任務(wù)嗎?您似乎在使用基本 Java 元素時(shí)遇到了很多麻煩。從未停止學(xué)習(xí)。


查看完整回答
反對(duì) 回復(fù) 2022-10-12
  • 3 回答
  • 0 關(guān)注
  • 186 瀏覽
慕課專欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)