簡體   English   中英

通過在 TestNG 內初始化 WebDriver 一次來使用 DataProvider

[英]Using DataProvider by initializing WebDriver one time within TestNG

我正在嘗試使用 dataprovider 檢查登錄頁面控件,但我不想為每個用戶名密碼控件一次又一次地初始化 webdriver。 一旦我進入登錄頁面,在不啟動另一個驅動程序的情況下一次性檢查登錄頁面上的所有相關場景對我來說似乎更方便,但我無法弄清楚。 運行以下代碼時,正在正確檢查 data[0][0] 和 data[0][1],但在嘗試鍵入 data[1][0 ] 和數據[1][1]。 可能是因為驅動程序當時沒有查看該頁面。 我該如何處理這個問題?

錯誤:

org.openqa.selenium.NoSuchElementException: no such element: Unable to locate element: {"method":"xpath","selector":"//div[@class='q-input-wrapper email-input']//input[@class='q-input']"}

代碼:

    public class TestCaseFirst {
    
    public WebDriver driver;
    
    @BeforeTest
    public void Start() throws InterruptedException {
        
        WebDriverManager.chromedriver().setup();
        driver= new ChromeDriver();
        driver.get("https://www.faxzas.com/");
        driver.manage().window().maximize();
        Thread.sleep(2000);}
        
    @Test(priority=1)
    public void RoadtoLogin() throws InterruptedException {
        
        driver.findElement(By.xpath("//a[@title='Close']")).click();
        Thread.sleep(1000);
        driver.findElement(By.xpath("//div[@class='login-container']//span[@id='not-logged-in-container']")).click();;
        Thread.sleep(1000);
    }
    
    
    @Test(dataProvider="loginInfos", priority=2)
    public void Login(String mail, String password) throws InterruptedException {
        
        driver.findElement(By.xpath("//div[@class='q-input-wrapper email-input']//input[@class='q-input']")).sendKeys(mail);
        Thread.sleep(1000);
        driver.findElement(By.xpath("//div[@class='q-input-wrapper']//input[@class='q-input']")).sendKeys(password);
        Thread.sleep(1000);
        driver.findElement(By.xpath("//button[@type='submit']")).click();
        Thread.sleep(1000);
        String description = driver.findElement(By.xpath("//div[@id='error-box-wrapper']//span[@class='message']")).getText();
        System.out.println(description);
    }
    
    
    @DataProvider(name="loginInfos")
    public Object[][] getData(){
        
        Object[][] data = new Object[6][2];
        data[0][0]="blackkfredo@gmail.com"; 
        data[0][1]=""; 
        data[1][0]="blackkfredo@gmail.com";
        data[1][1]="443242"; 
        data[2][0]=""; 
        data[2][1]="1a2b3c4d";
        data[3][0]="";
        data[3][1]=""; 
        data[4][0]="blackkfredogmail.com"; 
        data[4][1]="1a2b3c4d"; 
        data[5][0]="blackkfredo@gmail.com"; 
        data[5][1]="1a2b3c4d"; 
        
        return data;
    }
}

您需要將頁面重置為您期望元素所在的登錄頁面。 要么將 @AfterMethod 和 go 放回您嘗試測試的頁面,要么將 @BeforeMethod 放回相同的頁面。 您甚至可能想要結束您的 find 元素調用並返回主頁面來處理異常。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM