Search code examples
seleniumwebdriverjxl

Output values from selenium webdriver to excel sheet


I am using selenium webdriver to output first three records by using the Advanced Search of Linkedin in an excel sheet however I am not getting all the values of 'name' and 'description' fields except one. Please look into this

public void testExport() throws Exception {

    driver.get(baseUrl + "/");
    driver.findElement(By.id("session_key-login")).clear();
    driver.findElement(By.id("session_key-login")).sendKeys("#####");
    driver.findElement(By.id("session_password-login")).clear();
    driver.findElement(By.id("session_password-login")).sendKeys("#####");
    Thread.sleep(1000);
    driver.findElement(By.xpath("//input[@value='Sign In']")).click();
    driver.manage().timeouts().implicitlyWait(30, TimeUnit.SECONDS);
    driver.findElement(By.id("advanced-search")).click();
    driver.findElement(By.id("adv-O-N-ffs")).click();
    new Select(driver.findElement(By.id("advscountryCode"))).selectByVisibleText("United    States");
    driver.findElement(By.xpath(".//*[@id='adv-facet-CC']/fieldset/legend")).click();
    Thread.sleep(1000);
    driver.findElement(By.xpath(".//*[@id='adv-facet-CC']/fieldset/div/div/div/button")).click();
    Thread.sleep(1000);
    driver.findElement(By.xpath(".//*[@id='adv-facet-CC']/fieldset/div/div/input")).sendKeys("Leadmd");
    Thread.sleep(1000);
    driver.findElement(By.xpath(".//*[@id='pagekey-voltron_federated_search_internal_jsp']/div[1]/div/div[2]/ul/li[1]/img")).click();
    Thread.sleep(1000);
    driver.findElement(By.xpath(".//*[@id='adv-facet-CC']/fieldset/div/div/div/button")).click();
    Thread.sleep(1000);
    driver.findElement(By.xpath(".//*[@id='adv-facet-CC']/fieldset/div/div/input")).sendKeys("cloudwords");
    Thread.sleep(1000);
    driver.findElement(By.xpath(".//*[@id='pagekey-voltron_federated_search_internal_jsp']/div[1]/div/div[2]/ul/li[1]/img")).click();
    Thread.sleep(1000);
    driver.findElement(By.xpath(".//*[@id='adv-facet-CC']/fieldset/div/div/div/button")).click();
    Thread.sleep(1000);
    driver.findElement(By.xpath(".//*[@id='adv-facet-CC']/fieldset/div/div/input")).sendKeys("Grazitti");
    Thread.sleep(1000);
    driver.findElement(By.xpath(".//*[@id='pagekey-voltron_federated_search_internal_jsp']/div[1]/div/div[2]/ul/li[1]/img")).click();
    Thread.sleep(1000);
    driver.findElement(By.id("advs-title")).sendKeys("Marketing");
    driver.findElement(By.name("submit")).click();
    Thread.sleep(1000);
    String name, designation;

    for(int i = 0; i < 3; i++) {
        int j = i + 1 ;
        name = driver.findElement(By.xpath(".//*[@id='results']/li["+j+"]/div/h3/a")).getText();
        System.out.println("data1 = " +  name);
        designation = driver.findElement(By.xpath(".//*[@id='results']/li["+j+"]/div/p")).getText();
        System.out.println("data2 = " +  designation);

        File fExcel = new File("C:\\Users\\Master\\Desktop\\new.xls");
        WritableWorkbook writableBook = Workbook.createWorkbook(fExcel); 
        writableBook.createSheet("Data", 0);

        WritableSheet writableSheet = writableBook.getSheet(0);

        Label data1 = new Label(j, 1, name);
        writableSheet.addCell(data1);

        Label data2 = new Label(j, 1, designation);
        writableSheet.addCell(data2);

        writableBook.write();
        writableBook.close();               
    }
}

Solution

  • You are creating a new Excel file effectively overwriting the previous one by creating the sheet inside the for loop.

    Try modifying the for loop part of your code as below

        File fExcel = new File("C:\\Users\\Master\\Desktop\\new.xls");
        WritableWorkbook writableBook = Workbook.createWorkbook(fExcel); 
        writableBook.createSheet("Data", 0);
    
        WritableSheet writableSheet = writableBook.getSheet(0);
    
        for(int i = 0; i < 3; i++) {
            int j = i + 1 ;
            name = driver.findElement(By.xpath(".//*[@id='results']/li["+j+"]/div/h3/a")).getText();
            System.out.println("data1 = " +  name);
            designation = driver.findElement(By.xpath(".//*[@id='results']/li["+j+"]/div/p")).getText();
            System.out.println("data2 = " +  designation);
    
            Label data1 = new Label(j, i, name);
            writableSheet.addCell(data1);
    
            Label data2 = new Label(j, i, designation);
            writableSheet.addCell(data2);   
        }
    
        writableBook.write();
        writableBook.close();               
    

    Also new Label (j,1,name) means data is getting added to the first row one after other. You may change it too new Label (j,i,name) so that each name-designation pair will be added to a new row.

    Let me know if this helps you