我的第一个问题在这里!如果我错过了什么,请原谅!
我已经编写了从Excel中选择URL的代码,然后通过从Excel工作表中获取相应的数据来单击url中的元素。该脚本运行正常。但是,在最后一次循环运行后,它仍会引发Invalid Argument异常。没有错误(至少在我看来),我已经在excel中验证了网址链接。他们很好。脚本当前表现出我想要的方式。但是我还是例外。没有执行driver.close的最后一步。请检查代码,让我知道我哪里出错了。
excel中的第一列是url。接下来的几列包含由脚本拾取的文本,并用于linktext命令以单击url中的元素。
package newpackage;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import java.util.concurrent.TimeUnit;
import org.openqa.selenium.By;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.support.ui.ExpectedConditions;
import org.openqa.selenium.support.ui.WebDriverWait;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.InvalidObjectException;
import java.io.IOException;
import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.xssf.usermodel.*;
import org.apache.poi.xssf.usermodel.XSSFCell;
import org.apache.poi.xssf.usermodel.XSSFRow;
import org.apache.poi.xssf.usermodel.XSSFSheet;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
public class ExcelRead {
public static void main(String[] args) throws Exception {
System.setProperty("webdriver.chrome.driver","C:\\driver\\chromedriver.exe");
WebDriver driver = new ChromeDriver();
driver.manage().timeouts().implicitlyWait(30, TimeUnit.SECONDS);
WebDriverWait wait=new WebDriverWait(driver, 20);
String baseUrl = "https://google.com/";
driver.get(baseUrl);
FileInputStream fis = new FileInputStream("D:\\test_data.xlsx");
@SuppressWarnings("resource")
XSSFWorkbook workbook = new XSSFWorkbook(fis);
XSSFSheet sheet = workbook.getSheetAt(0);
int s=sheet.getLastRowNum()+1;
for(int i=0; i<s; i++)
{
int k = sheet.getRow(i).getLastCellNum();
XSSFCell cell=sheet.getRow(i).getCell(0);
String url=cell.toString();
driver.get(url);
Thread.sleep(3000);
System.out.println("Launched "+url);
Thread.sleep(5000);
for(int j=1;j<k;j++)
{
String data0=sheet.getRow(i).getCell(j).getStringCellValue();
driver.findElement(By.linkText(data0)).click();
System.out.println(data0+" Saved");
}
}
driver.close();
}
}
当前在脚本运行执行后获取此信息:
Exception in thread "main" org.openqa.selenium.InvalidArgumentException: invalid argument
您可以按照以下说明检查是否为null。这样,即使您在excel中有空数据,它也可以工作。
for(int i=0; i<s; i++)
{
int k = sheet.getRow(i).getLastCellNum();
XSSFCell cell=sheet.getRow(i).getCell(0);
String url=cell.toString();
if(url!=null && !url.isEmpty())
{
driver.get(url);
Thread.sleep(3000);
System.out.println("Launched "+url);
Thread.sleep(5000);
for(int j=1;j<k;j++)
{
String data0=sheet.getRow(i).getCell(j).getStringCellValue();
if(data0!=null && !data0.isEmpty())
driver.findElement(By.linkText(data0)).click();
System.out.println(data0+" Saved");
}
}
}
谢谢。这样就解决了。该脚本在第二个if条件内循环。但是我已经改正了它,现在可以正常工作了。谢谢!