您如何 运行 对循环进行通过或失败测试、识别失败并继续通过失败的尝试?

How do you run a pass or fail test on your loop, identify failures, and continue passed failed attempt?

我有一个程序循环遍历用作 URL 的 IP 地址文件。它登录、进行更改、保存和注销。我需要实施通过或失败测试以查看哪些 URL 没有完成循环。此外,我还需要循环在将失败写入文件时继续传递失败,以便我可以看到哪些没有通过。现在,程序将循环直到遇到错误的 URL 然后抛出 ERR_CONNECTION_TIMED_OUT。任何帮助将不胜感激,因为我是编程和 SO 的新手。

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;

public class IPLog {

    WebDriver driver;
    private BufferedWriter bwr1;
                
    //Sign In
     public  void userLogin() throws InterruptedException {
        WebDriver driver;
        System.setProperty("webdriver.chrome.driver","C:\Drivers\chromedriver.exe");
        driver = new ChromeDriver();
        String data = "";
        try {

            BufferedReader reader = new BufferedReader(new FileReader("path"));
            String line;
            while((line = reader.readLine()) != null) {
            data ="http://"+line;
            System.out.println(data);
//open browser
        driver.get(data);
        driver.switchTo().frame(driver.findElement(By.name("bodyf")));
        Thread.sleep(2000);
        driver.findElement(By.name("username")).sendKeys("user");
        Thread.sleep(2000);
        driver.findElement(By.name("password")).sendKeys("pass");
        driver.findElement(By.xpath("/html/body/form/span/table/tbody/tr[3]/td/p/input")).click();
//find password
        driver.switchTo().frame(driver.findElement(By.name("left")));
        driver.findElement(By.xpath("//*[@id=\"4050000\"]/a")).click();
        driver.findElement(By.xpath("//*[@id=\"4050000\"]/table/tbody/tr[3]/td[2]/a")).click();
//change password
        driver.switchTo().parentFrame();
        driver.switchTo().frame(1);
        Thread.sleep(2000);
        driver.findElement(By.xpath("/html/body/form/p[1]/table/tbody/tr[2]/td[2]/input")).sendKeys("newpass");
        Thread.sleep(2000);
        driver.findElement(By.xpath("/html/body/form/p[1]/table/tbody/tr[3]/td[2]/input")).sendKeys("newpass");
        Thread.sleep(2000);
        driver.findElement(By.xpath("/html/body/form/p[2]/input[2]")).click();
//save and logout
        Thread.sleep(3000);
        driver.switchTo().alert().accept();
        driver.switchTo().parentFrame();
        driver.switchTo().frame(driver.findElement(By.name("left")));
        driver.findElement(By.id("sysLogout")).click();
        Thread.sleep(3000);
        driver.switchTo().alert().accept();

        
        //completion test
        FileWriter writer = new FileWriter("path");
        BufferedWriter bwr = (new BufferedWriter(writer));
        bwr.write(data + "- Test Passed\n");
        bwr.write("\n");

        try {
        FileWriter writer1 = new FileWriter("path");
        bwr1 = (new BufferedWriter(writer1));
        bwr1.write(data + "- Test Failed");
        bwr1.write("\n");

        System.out.println("fail");
    
        }
        catch (Exception e) {
        e.printStackTrace();
        }
        }
    } 
        catch (Exception e) {
        e.printStackTrace();
    }   
    }

    public static void main(String[] args) throws InterruptedException, IOException {
        IPLog obj = new IPLog();
        obj.userLogin();
    }

}

您可以为您正在处理的每一行添加一个 try-catch。例如,您可以按如下方式重写循环:

        FileWriter writer = new FileWriter("path");
        BufferedWriter bwr = (new BufferedWriter(writer));
        while((line = reader.readLine()) != null) {
            data ="http://"+line;
            System.out.println(data);
            try {
                doActionLine(data); 
                //add test passed               
                bwr.write(data + "- Test Passed\n");
                bwr.write("\n");
            } catch (Exception e) {
                //add test failed         
                bwr.write(data + "- Test Failed\n");
                bwr.write("\n");
            }
            
        }

如您所见,doActionLine 函数封装了检查:

private void doActionLine(String data) throws InterruptedException {
    //open browser
    driver.get(data);
    driver.switchTo().frame(driver.findElement(By.name("bodyf")));
    Thread.sleep(2000);
    driver.findElement(By.name("username")).sendKeys("user");
    Thread.sleep(2000);
    driver.findElement(By.name("password")).sendKeys("pass");
    driver.findElement(By.xpath("/html/body/form/span/table/tbody/tr[3]/td/p/input")).click();
    //find password
    driver.switchTo().frame(driver.findElement(By.name("left")));
    driver.findElement(By.xpath("//*[@id=\"4050000\"]/a")).click();
    driver.findElement(By.xpath("//*[@id=\"4050000\"]/table/tbody/tr[3]/td[2]/a")).click();
    //change password
    driver.switchTo().parentFrame();
    driver.switchTo().frame(1);
    Thread.sleep(2000);
    driver.findElement(By.xpath("/html/body/form/p[1]/table/tbody/tr[2]/td[2]/input")).sendKeys("newpass");
    Thread.sleep(2000);
    driver.findElement(By.xpath("/html/body/form/p[1]/table/tbody/tr[3]/td[2]/input")).sendKeys("newpass");
    Thread.sleep(2000);
    driver.findElement(By.xpath("/html/body/form/p[2]/input[2]")).click();
    //save and logout
    Thread.sleep(3000);
    driver.switchTo().alert().accept();
    driver.switchTo().parentFrame();
    driver.switchTo().frame(driver.findElement(By.name("left")));
    driver.findElement(By.id("sysLogout")).click();
    Thread.sleep(3000);
    driver.switchTo().alert().accept();
}

希望对你有所帮助。