2017-05-26 8 views
0

Ich habe alle Links von der Web-Seite in Arraylist hinzugefügt und dann alle URLs nacheinander getroffen.org.openqa.selenium.InvalidArgumentException: unbekannter Fehler: nicht unterstütztes Protokoll

public class Redirectionlinked1 
{ 
    public static List findAllLinks(WebDriver driver) 
    { 
     List <WebElement> elementList = new ArrayList(); 
     elementList = driver.findElements(By.tagName("a")); 
     elementList.addAll(driver.findElements(By.tagName("img"))); 

     List finalList = new ArrayList(); 
     for(WebElement element : elementList) 
     { 
      if (element.getAttribute("href") != null) 
      { 
       finalList.add(element); 
      } 
     } 
     return finalList; 
    } 

    public static void main(String[] args) throws Exception 
    { 
     System.setProperty("webdriver.gecko.driver", "E:\\Softwares\\gecko\\geckodriver-v0.16.1-win64\\geckodriver.exe"); 
     System.setProperty("webdriver.chrome.driver", "E:\\chromedriver.exe"); 

     WebDriver driver = new ChromeDriver(); 
     driver.get(" http://testsite.com"); 
     List <WebElement > allImages = findAllLinks(driver); 

     System.out.println("Total number of elements found " + allImages.size()); 
     driver = new ChromeDriver(); 
     URI uri =null; 
     for (WebElement element : allImages) { 
     if (!driver.getCurrentUrl().equals(element.getAttribute("href")) && driver.) 
     { 
      driver.manage().deleteAllCookies(); 
      driver.get(element.getAttribute("href")); 
      driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS); 
      Thread.sleep(500); 
      System.out.println(element.getAttribute("href")); 
      uri = new URI(driver.getCurrentUrl()); 
      try 
      { 
       if(uri.getHost().equalsIgnoreCase("SpecificDomain.net")) 
       { 
        System.out.println(" Redirected URL-->> "+element.getAttribute("href")); 
       } 
      } 
      catch (Exception e) 
      { 
        e.printStackTrace(); 
      } 
     } 
    } 
} 

-Code funktioniert wie erwartet (es die URL in Browser startet) für ersten Link führt später einen Fehler:

Exception in thread "main" org.openqa.selenium.InvalidArgumentException: unknown error: unsupported protocol (Session info: chrome=58.0.3029.110) (Driver info: chromedriver=2.26.436362 (5476ec6bf7ccbada1734a0cdec7d570bb042aa30),platform=Windows NT 6.1.7601 SP1 x86_64) (WARNING: The server did not provide any stacktrace information) Command duration or timeout: 131 milliseconds Build info: version: 'unknown', revision: '3169782', time: '2016-09-29 10:24:50 -0700' System info: host: 'ETPUN-LT009', ip: '192.168.2.193', os.name: 'Windows 7', os.arch: 'amd64', os.version: '6.1', java.version: '1.8.0_111' Driver info: org.openqa.selenium.chrome.ChromeDriver Capabilities [{applicationCacheEnabled=false, rotatable=false, mobileEmulationEnabled=false, networkConnectionEnabled=false, chrome={chromedriverVersion=2.26.436362 (5476ec6bf7ccbada1734a0cdec7d570bb042aa30), userDataDir=C:\scoped_dir12784_32532}, takesHeapSnapshot=true, pageLoadStrategy=normal, databaseEnabled=false, handlesAlerts=true, hasTouchScreen=false, version=58.0.3029.110, platform=XP, browserConnectionEnabled=false, nativeEvents=true, acceptSslCerts=true, locationContextEnabled=true, webStorageEnabled=true, browserName=chrome, takesScreenshot=true, javascriptEnabled=true, cssSelectorsEnabled=true, unexpectedAlertBehaviour=}] Session ID: df813868289a8f15f947ac620b3b1882 at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62) at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) at java.lang.reflect.Constructor.newInstance(Constructor.java:423) at org.openqa.selenium.remote.ErrorHandler.createThrowable(ErrorHandler.java:206) at org.openqa.selenium.remote.ErrorHandler.throwIfResponseFailed(ErrorHandler.java:164) at org.openqa.selenium.remote.RemoteWebDriver.execute(RemoteWebDriver.java:636) at org.openqa.selenium.remote.RemoteWebDriver.get(RemoteWebDriver.java:323) at Practices.Redirectionlinked1.main(Redirectionlinked1.java:99)

Meine Konfigurationen sind: -

Chrome - Version 58.0.3029.110 (64-bit)

Geckodriver-v0.16.1-win64

Windows -7

Java - 1.8.1

+1

Nur eine Vermutung - Sie haben einen führenden Platz in Ihrer URL für die get() -Methode. – Grasshopper

+0

Danke für die Antwort, ich habe auch versucht mit trim, aber keinen Erfolg. driver.get (element.getAttribute ("href") .trim()); – user3302083

+0

Ich sprach von der driver.get() Methode - driver.get ("http://testsite.com"); - Sie haben einen Platz am Anfang. Der Fehler, den Sie bekommen, scheint diese Zeile zu erwähnen. Versuchen Sie, den Platz zu entfernen und prüfen Sie, ob es funktioniert – Grasshopper

Antwort

1

Dies, weil sein könnte Es gibt Links in Ihrer Website mit hre, die wie #, resources/123.img aussehen, die keine vollständigen URLs sind und das Auslösen eines get würde die Ausnahme ergeben. Sie sollten überprüfen, ob die URLs gültig sind. Dies kann durch einen Vergleich unter Verwendung von link.startsWith("http://") || link.startsWith("https://")

Verwiesen werden. Es gibt auch andere Orte, an denen Sie testen würden fehlschlagen.

  1. finalList wird als Liste deklariert und zurückgegeben. Dies muss in "Liste" geändert werden und sollte mit dem bewerteten Link gefüllt werden. Das liegt daran, dass Sie eine for-Schleife haben, in der Sie driver.get (newLink) aufrufen, die alle WebElement-Objekte in finalList zurücksetzt, da sie früher gefunden wurden und eine Ausnahme geben.

  2. img Tags haben nicht href. Verwenden Sie stattdessen 'src'.

Hier ist der Code nach all diesen Änderungen. Bitte beachten Sie, dass es andere Bedingungen geben kann, um zu überprüfen, ob die URL gültig ist oder nicht, die ich hier nicht aufgelistet habe.

public static List<String> findAllLinks(WebDriver driver) { 

     // Declare finalList as string. 
     List<String> finalList = new ArrayList<>(); 

     // Get the a tags 
     List<WebElement> elementList = driver.findElements(By.tagName("a")); 
     // get the img tags 
     elementList.addAll(driver.findElements(By.tagName("img"))); 

     for (WebElement element : elementList) { 
      // a tags have "href", img tags have src 
      String link = element.getTagName().equalsIgnoreCase("a") ? element.getAttribute("href") 
        : element.getAttribute("src"); 
      // Check if link is not null and whether is a valid link by checking 
      // starts with http or https 
      if (link != null && (link.startsWith("http://") || link.startsWith("https://"))) { 
       finalList.add(link); 
      } 
     } 
     return finalList; 
    } 

    public static void main(String[] args) throws Exception { 
     System.setProperty("webdriver.gecko.driver", 
       "E:\\Softwares\\gecko\\geckodriver-v0.16.1-win64\\geckodriver.exe"); 
     System.setProperty("webdriver.chrome.driver", "E:\\chromedriver.exe"); 

     WebDriver driver = new ChromeDriver(); 
     driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS); 
     driver.get("http://testsite.com"); 
     List<String> allLinks = findAllLinks(driver); 

     System.out.println("Total number of elements found " + allLinks.size()); 
     driver = new ChromeDriver(); 
     URI uri = null; 
     for (String link : allLinks) { 
      if (!driver.getCurrentUrl().equals(link)) { 
       driver.manage().deleteAllCookies(); 
       driver.get(link); 

       Thread.sleep(500); 

       System.out.println(link); 
       uri = new URI(driver.getCurrentUrl()); 
       try { 
        if (uri.getHost().equalsIgnoreCase("SpecificDomain.net")) { 
         System.out.println("Redirected URL-->> " + link); 
        } 
       } catch (Exception e) { 
        e.printStackTrace(); 
       } 
      } 
     } 
    } 
Verwandte Themen