Как проверить неработающие ссылки и сохранить результат в Excel с помощью selenium webdriver? - PullRequest
0 голосов
/ 08 мая 2020

Мне нужно получить все ссылки на веб-странице и сохранить их в первом столбце на листе 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"); Кто-нибудь может помочь в этом?

1 Ответ

0 голосов
/ 09 мая 2020

В приведенном выше случае ячейка еще не существует, поэтому getCell возвращает null.

Вы должны обнаружить это и создать ячейку, если она не существует, с createCell метод:

Cell resultCell= Sheet1.getRow(i).getCell(1);
if (cell == null)
{
    cell = Sheet1.getRow(i).createCell(1);
}
// Then set the value.
cell.setCellValue("PASS");

В качестве альтернативы есть перегрузка getCell, где вы можете указать MissingCellPolicy, чтобы автоматически создавалось пустое Cell если его еще не было:

cell = sheet.getRow(i).getCell(1, Row.MissingCellPolicy.CREATE_NULL_AS_BLANK);
...