2017-09-29 1 views
-1

Ich schreibe einen Selenium-Code mit Java und die Funktionalität ist wie folgt.Effiziente Weise, Daten mit Selen zu erhalten

  1. öffnen Sie einen Browser und navigieren Sie zu der angegebenen URL
  2. In dieser URL ein searchbox ist, geben Sie das Stichwort polices und suchen.
  3. Es würden 10 Richtlinien pro Seite aufgelistet und es gibt insgesamt 125 Seiten.

und dann

  1. Klicken Sie auf einen Link.
  2. Holen Sie sich die Daten von der Verbindung.
  3. Gehen Sie zur vorherigen Seite.
  4. Klicken Sie auf die nächste.
  5. Wenn alle Maßnahmen in dieser Seite haben, klicken Sie auf Weiter, und beginnen Sie mit Schritt 1.

Zur Zeit ist die Frage, manchmal sucht er bis 20. Seite und manchmal bis zum 7. Seite. Bis zum Ende geht es nicht. dazwischen gibt es einen Fehler wie unten.

Exception in thread "main" org.openqa.selenium.WebDriverException: unknown error: Element ... is not clickable at point (358, 214). Other element would receive the click: (Session info: chrome=61.0.3163.100) (Driver info: chromedriver=2.32.498550 (9dec58e66c31bcc53a9ce3c7226f0c1c5810906a),platform=Windows NT 10.0.15063 x86_64) (WARNING: The server did not provide any stacktrace information) Command duration or timeout: 0 milliseconds Build info: version: '3.5.3', revision: 'a88d25fe6b', time: '2017-08-29T12:42:44.417Z' System info: host: 'HDC3-L-6441MKV', ip: '10.196.224.96', os.name: 'Windows 10', os.arch: 'amd64', os.version: '10.0', java.version: '1.8.0_111' Driver info: org.openqa.selenium.chrome.ChromeDriver Capabilities [{mobileEmulationEnabled=false, hasTouchScreen=false, platform=XP, acceptSslCerts=true, webStorageEnabled=true, browserName=chrome, takesScreenshot=true, javascriptEnabled=true, platformName=XP, setWindowRect=true, unexpectedAlertBehaviour=, applicationCacheEnabled=false, rotatable=false, networkConnectionEnabled=false, chrome={chromedriverVersion=2.32.498550 (9dec58e66c31bcc53a9ce3c7226f0c1c5810906a), userDataDir=C:/Users/rakesh.keerthi/AppData/Local/Google/Chrome/User Data}, takesHeapSnapshot=true, pageLoadStrategy=normal, unhandledPromptBehavior=, databaseEnabled=false, handlesAlerts=true, version=61.0.3163.100, browserConnectionEnabled=false, nativeEvents=true, locationContextEnabled=true, cssSelectorsEnabled=true}] Session ID: 72dc7f70f0d15b842c217058582a10ec at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) at sun.reflect.NativeConstructorAccessorImpl.newInstance(Unknown Source) at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Source) at java.lang.reflect.Constructor.newInstance(Unknown Source) at org.openqa.selenium.remote.ErrorHandler.createThrowable(ErrorHandler.java:215) at org.openqa.selenium.remote.ErrorHandler.throwIfResponseFailed(ErrorHandler.java:167) at org.openqa.selenium.remote.http.JsonHttpResponseCodec.reconstructValue(JsonHttpResponseCodec.java:40) at org.openqa.selenium.remote.http.AbstractHttpResponseCodec.decode(AbstractHttpResponseCodec.java:82) at org.openqa.selenium.remote.http.AbstractHttpResponseCodec.decode(AbstractHttpResponseCodec.java:45) at org.openqa.selenium.remote.HttpCommandExecutor.execute(HttpCommandExecutor.java:164) at org.openqa.selenium.remote.service.DriverCommandExecutor.execute(DriverCommandExecutor.java:82) at org.openqa.selenium.remote.RemoteWebDriver.execute(RemoteWebDriver.java:646) at org.openqa.selenium.remote.RemoteWebElement.execute(RemoteWebElement.java:275) at org.openqa.selenium.remote.RemoteWebElement.click(RemoteWebElement.java:82) at OpenGoogleInFF.printResult(OpenGoogleInFF.java:48) at OpenGoogleInFF.main(OpenGoogleInFF.java:36)

Hier ist mein Code.

import java.util.Date; 
import java.util.List; 

import org.openqa.selenium.By; 
import org.openqa.selenium.JavascriptExecutor; 
import org.openqa.selenium.WebDriver; 
import org.openqa.selenium.WebElement; 
import org.openqa.selenium.chrome.ChromeDriver; 
import org.openqa.selenium.chrome.ChromeOptions; 
import org.openqa.selenium.support.ui.ExpectedConditions; 
import org.openqa.selenium.support.ui.WebDriverWait; 

public class OpenGoogleInFF { 

    public static void main(String[] args) throws Exception { 
     System.setProperty("webdriver.chrome.driver", 
       "C:\\Users\\myUserName\\Downloads\\Selenium\\chromedriver.exe"); 
     String user = System.getProperty("user.name"); 
     ChromeOptions options = new ChromeOptions(); 
     options.addArguments("--user-data-dir=C:/Users/" + user + "/AppData/Local/Google/Chrome/User Data"); 
     options.addArguments("--start-maximized"); 
     WebDriver driver = new ChromeDriver(options); 

     driver.get("myUrl"); 
     Thread.sleep(6000L); 
     driver.findElement(By.id("SearchText")).sendKeys("policies"); 
     driver.findElement(By.className("ion-ios-search")).click(); 
     Thread.sleep(5000L); 
     int noOfPages = driver.findElements(By.xpath(".//*[@class='pagination']/li")).size() - 5; 
     System.out.println("no of pages are " + noOfPages); 
     System.out.println(new Date()); 
     for (int i = 0; i < noOfPages; i++) { 
      Thread.sleep(3000L); 
      List<WebElement> numberOfChildren = driver.findElements(By.xpath("//div[@ng-repeat='result in results']")); 
      int count = numberOfChildren.size(); 
      printResult(driver, count); 
      driver.findElement(By.xpath(".//*[@id='pagingControl']/ul/li[128]/a")).click(); 
     } 
     System.out.println(new Date()); 
    } 

    private static void printResult(WebDriver driver, int count) throws Exception { 
     for (int i = 1; i <= count; i++) { 
      WebElement element = (new WebDriverWait(driver, 10)).until(ExpectedConditions.visibilityOfElementLocated(
        By.xpath("html/body/div[1]/div/div[2]/div/div/div[2]/div[2]/div[1]/div/div/div[" + i 
          + "]/ul/span[2]/div/li[1]/h3/a"))); 

      scrollToElementByOffset(driver, element, -200).click(); 
      Thread.sleep(3000L); 

      (new WebDriverWait(driver, 10)).until(ExpectedConditions.presenceOfElementLocated(
        By.xpath("html/body/div[1]/div/div[2]/div/div/section/section/div/div[4]/a[2]"))).click(); 
      String policyNumber = driver 
        .findElement(By 
          .xpath("html/body/div[1]/div/div[2]/div/div/section/section/div/div[6]/div[2]/table/tbody/tr[1]/td[2]")) 
        .getText(); 

      String policyStatement = driver.findElement(By.xpath(".//*[@id='policy-view']/section/div/div[3]/h1")) 
        .getText(); 

      String policyDetails = driver 
        .findElement(By 
          .xpath("html/body/div[1]/div/div[2]/div/div/section/section/div/div[8]/div/div/div[2]/div[2]/div")) 
        .getText(); 

      System.out.println(policyNumber + "\t" + policyStatement); 
      System.out.println("\n\n" + policyDetails + "\n\n"); 

      driver.navigate().back(); 
      driver.navigate().back(); 

     } 
    } 

    private static WebElement scrollToElementByOffset(WebDriver driver, WebElement element, int offset) { 
     JavascriptExecutor jse = (JavascriptExecutor) driver; 
     jse.executeScript("window.scrollTo(" + element.getLocation().getX() + "," 
       + (element.getLocation().getY() + offset) + ");"); 

     return element; 
    } 
} 

Entschuldigung für das Ersetzen der tatsächlichen URL. Dies ist die interne Website unserer Organisation.

lassen Sie es mich wissen, wie kann ich meinen Code optimieren/verbessern die Ergebnisse von allen Seiten zu bekommen und auch, wie kann ich schneiden die Gesamtlaufzeit nach unten.

Dank

+0

Mögliche Duplikat [Debugging „Element ist nicht anklickbar an dem Punkt“ Fehler] (https://stackoverflow.com/questions/11908249/debugging-element-is-not-clickable-at-point-error) –

+0

@Rotemben, diese ist kein Duplikat der genannten Frage. Ich weiß, wie man das macht, brauchte nur einen besseren Weg. – user3872094

+0

Dies ist nicht gut für SO, da der Code funktioniert. Sie sollten diese Frage löschen und auf codereview.stackexchange.com verschieben, wenn Sie nach Verbesserungen für Ihren Code usw. fragen. – JeffC

Antwort

0

vor einigen Tagen arbeite ich wie Projekt ähnlicher Art, wenn ich nächste Seite klicken und gehen, aber manchmal Netzwerk oder Browser-Problem konfrontiert ich die gleiche Art von problem.Then ich es von try und catch handhaben .. damit umgehen. Wenn ein Fehler werfen ich Nachricht einfach nicht die program.If beenden die gleichen Fehler 7 zu einem Zeitpunkt erfolgt dann beenden ich Schleife sonst wird es laufen ..

    int counts=0; 

        try { 
     //Here I write a code and execute 

         //Program END 
         counts=0; //if my program end then I consider all the operation successfully and assign value count=0 


       } 


       catch (org.openqa.selenium.WebDriverException e){ 

        count++; 
        System.out.println(count); 
         if(count>=7){ 
       //here if sequencially 7 time i get same error then i terminate current loop and send to next loop 
         break; 
         } 

auf diese Weise können Sie Ihr Problem lösen kann ..Hope es wird Ihnen helfen ..

Verwandte Themen