2016-03-29 6 views
1

Hallo habe ich ein Problem mit Selenium WebDriver in Java. Wenn ich diesen Code verwenden (ohne element.click(); verwenden es funktioniert)kann keinen Text mit Selen

public static void main(String[] args) { 
     try{ 

      File salida= new File("salidas/Salida.txt"); 
      FileWriter fw = new FileWriter(salida); 
      PrintWriter volcado = new PrintWriter(fw); 

     System.setProperty("webdriver.chrome.driver", "path to\\chromedriver.exe"); 
     WebDriver driver = new ChromeDriver(); 
     driver.get("http://ranking-empresas.eleconomista.es/REPSOL-PETROLEO.html"); 


     String name = driver.findElement(By.xpath("//*[@id=\"business-profile\"]/div[17]/div[1]/div[2]/table/tbody/tr[1]/td[2]")).getText(); 
     String obj_soc = driver.findElement(By.xpath("//*[@id=\"business-profile\"]/div[17]/div[1]/div[2]/table/tbody/tr[2]/td[2]")).getText(); 
     String direcc = driver.findElement(By.xpath("//*[@id=\"business-profile\"]/div[17]/div[1]/div[2]/table/tbody/tr[3]/td[2]")).getText(); 
     String loc = driver.findElement(By.xpath("//*[@id=\"business-profile\"]/div[17]/div[1]/div[2]/table/tbody/tr[4]/td[2]")).getText(); 
     String tel = driver.findElement(By.xpath("//*[@id=\"business-profile\"]/div[17]/div[1]/div[2]/table/tbody/tr[5]/td[2]")).getText(); 
     String url = driver.findElement(By.xpath("//*[@id=\"business-profile\"]/div[17]/div[1]/div[2]/table/tbody/tr[8]/td[2]")).getText(); 
     String actividad = driver.findElement(By.xpath("//*[@id=\"business-profile\"]/div[17]/div[1]/div[2]/table/tbody/tr[9]/td[2]")).getText(); 

      volcado.print(name+" "+obj_soc+" "+direcc+" "+loc+" "+tel+" "+url+" "+actividad);  
      volcado.close(); 
      driver.close(); 


    }catch(Exception e){ 

     e.printStackTrace(); 

    }} 

aber das Problem Cames, wenn ich von der vorherigen Seite mit dem element.click(); wie diese zugreifen möchten:

System.setProperty("webdriver.chrome.driver", "path to\\chromedriver.exe"); 

WebDriver driver = new ChromeDriver(); 
     driver.get("http://ranking-empresas.eleconomista.es/ranking_empresas_nacional.html"); 

     WebElement element = driver.findElement(By.xpath("//*[@id=\"tabla-ranking\"]/table/tbody/tr[1]/td[7]/a")); 
     element.click(); 

     String name = driver.findElement(By.xpath("//*[@id=\"business-profile\"]/div[17]/div[1]/div[2]/table/tbody/tr[1]/td[2]")).getText(); 
     String obj_soc = driver.findElement(By.xpath("//*[@id=\"business-profile\"]/div[17]/div[1]/div[2]/table/tbody/tr[2]/td[2]")).getText(); 
     String direcc = driver.findElement(By.xpath("//*[@id=\"business-profile\"]/div[17]/div[1]/div[2]/table/tbody/tr[3]/td[2]")).getText(); 
     String loc = driver.findElement(By.xpath("//*[@id=\"business-profile\"]/div[17]/div[1]/div[2]/table/tbody/tr[4]/td[2]")).getText(); 
     String tel = driver.findElement(By.xpath("//*[@id=\"business-profile\"]/div[17]/div[1]/div[2]/table/tbody/tr[5]/td[2]")).getText(); 
     String url = driver.findElement(By.xpath("//*[@id=\"business-profile\"]/div[17]/div[1]/div[2]/table/tbody/tr[8]/td[2]")).getText(); 
     String actividad = driver.findElement(By.xpath("//*[@id=\"business-profile\"]/div[17]/div[1]/div[2]/table/tbody/tr[9]/td[2]")).getText(); 

      volcado.print(name+" "+obj_soc+" "+direcc+" "+loc+" "+tel+" "+url+" "+actividad);  
      volcado.close(); 




      driver.close(); 


    }catch(Exception e){ 

     e.printStackTrace(); 

    }} 

Selen den Browser öffnet, und die Seiten aber meine Variablen erhalten nicht den Text des XPath.

Antwort

0

Die Daten sind zu dem Zeitpunkt, zu dem Sie den Text abrufen möchten, noch nicht auf der Seite vorhanden. Warten Sie auf die Daten, bevor sie zu lesen und es sollte in Ordnung sein:

WebDriver driver = new ChromeDriver(); 
WebDriverWait wait = new WebDriverWait(driver, 10); 

driver.get("http://ranking-empresas.eleconomista.es/ranking_empresas_nacional.html"); 

driver.findElement(By.xpath("//*[@id=\"tabla-ranking\"]/table/tbody/tr[1]/td[7]/a")).click(); 

// wait for the data to be present 
wait.until(ExpectedConditions.visibilityOfElementLocated(By.id("business-profile"))); 

String name = driver.findElement(By.xpath("//*[@id=\"business-profile\"]/div[17]/div[1]/div[2]/table/tbody/tr[1]/td[2]")).getText(); 
String obj_soc = driver.findElement(By.xpath("//*[@id=\"business-profile\"]/div[17]/div[1]/div[2]/table/tbody/tr[2]/td[2]")).getText(); 
String direcc = driver.findElement(By.xpath("//*[@id=\"business-profile\"]/div[17]/div[1]/div[2]/table/tbody/tr[3]/td[2]")).getText(); 
String loc = driver.findElement(By.xpath("//*[@id=\"business-profile\"]/div[17]/div[1]/div[2]/table/tbody/tr[4]/td[2]")).getText(); 
String tel = driver.findElement(By.xpath("//*[@id=\"business-profile\"]/div[17]/div[1]/div[2]/table/tbody/tr[5]/td[2]")).getText(); 
String url = driver.findElement(By.xpath("//*[@id=\"business-profile\"]/div[17]/div[1]/div[2]/table/tbody/tr[8]/td[2]")).getText(); 
String actividad = driver.findElement(By.xpath("//*[@id=\"business-profile\"]/div[17]/div[1]/div[2]/table/tbody/tr[9]/td[2]")).getText(); 

volcado.print(name+" "+obj_soc+" "+direcc+" "+loc+" "+tel+" "+url+" "+actividad);  
volcado.close(); 

jedoch eine viel sauberere Alternative alle Zellen mit einem einzigen XPath zu bekommen wäre:

driver.get("http://ranking-empresas.eleconomista.es/ranking_empresas_nacional.html"); 

driver.findElement(By.xpath("//*[@id=\"tabla-ranking\"]/table/tbody/tr[1]/td[7]/a")).click(); 

// wait for the data to be present 
List<WebElement> cells = wait.until(
    ExpectedConditions.presenceOfAllElementsLocatedBy(
    By.xpath("//h3[.='Datos comerciales de REPSOL PETROLEO SA']/following::tbody[1]/tr/td[2]"))); 

String name = cells.get(0).getText(); 
String obj_soc = cells.get(1).getText(); 
String direcc = cells.get(2).getText(); 
String loc = cells.get(3).getText(); 
String tel = cells.get(4).getText(); 
String url = cells.get(7).getText(); 
String actividad = cells.get(8).getText();