Мне нужно получить все ссылки на веб-странице и сохранить их в первом столбце на листе Excel и проверить, действительна ли ссылка, и обновить результат во втором столбце того же листа Excel.
Вот код, который я пробовал:
public class login {
public WebDriver driver;
@BeforeTest
public void login1() throws InterruptedException {
System.setProperty("webdriver.chrome.driver", "driver path");
driver.get("url");
Thread.sleep(20000);
}
@Test
public void data() throws IOException {
File src = new File("excel path");
FileInputStream fis = new FileInputStream(src);
XSSFWorkbook wb = new XSSFWorkbook(fis);
XSSFSheet Sheet1 = wb.getSheetAt(0);
Sheet1.createRow(0).createCell(0);
List<WebElement> links=driver.findElements(By.tagName("a"));
String url = "";
HttpURLConnection huc;
int respCode = 200;
int cell =0;
for(int i=0;i<links.size();i++) {
WebElement alinks = links.get(i);
String allinks = alinks.getAttribute("href");
System.out.println(allinks);
XSSFRow row = Sheet1.createRow(i);
XSSFCell excelCell = row.createCell(cell);
excelCell.setCellValue(allinks);
}
Iterator<WebElement> it = links.iterator();
while(it.hasNext()){
url = it.next().getAttribute("href");
System.out.println(url);
if(url == null || url.isEmpty()){
System.out.println("URL is not yet published");
continue;
}
try {
huc = (HttpURLConnection)(new URL(url).openConnection());
huc.setRequestMethod("HEAD");
huc.connect();
respCode = huc.getResponseCode();
for (int i=1; i <= Sheet1.getLastRowNum(); i++){
Cell resultCell= Sheet1.getRow(i).getCell(1);
if(respCode >= 400){
System.out.println(url+" is a broken link");
resultCell.setCellValue("FAIL");
}
else{
System.out.println(url+" is a valid link");
resultCell.setCellValue("PASS");
}
}
} catch (MalformedURLException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
FileOutputStream fout = new FileOutputStream(src);
wb.write(fout);
}
С помощью этого кода я могу получить все ссылки с веб-страницы и сохранить их в первом столбце листа Excel, но при проверке неработающих ссылок только первые ссылка проверяется, и перед проверкой второй ссылки она выдает ошибку java .lang.NullPointerException в этой строке resultCell.setCellValue ("PASS"); Кто-нибудь может помочь в этом?