Reputation: 875
I added all the links from web-page in Arraylist
and then hit all the URLs one by one.
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 works as expected (it launches the URL in browser) for first link later throws an error :
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)
My configurations are :-
Chrome - Version 58.0.3029.110 (64-bit)
Geckodriver-v0.16.1-win64
Windows -7
Java - 1.8.1
Upvotes: 2
Views: 56560
Reputation: 1
Upgrade your selenium web driver .It is compatiblity issues with webdriver and your browser version. I updated my pom file with latest version of chrome web driver and it worked. Upgrading the chrome web driver Version to 3.9.1 and above also resolves the issue.
<dependency>
<groupId>org.seleniumhq.selenium</groupId>
<artifactId>selenium-chrome-driver</artifactId>
<version>4.0.0-alpha-5</version>
</dependency>
Upvotes: 0
Reputation: 539
I recently got the error org.openqa.selenium.InvalidArgumentException: invalid argument org.openqa.selenium.remote.RemoteWebDriver.get(RemoteWebDriver.java:282)
In my case, it was because I was using Cucumber 5.5.0 & when I tried to pass a full url as a variable in the Scenario Outline data table, Cucumber got confused & caused Selenium to have an error.
Upvotes: 0
Reputation: 3776
This could be because there are links in you website with hre that looks like #
, resources/123.img
which are not complete URLS and triggering a get would result in the exception. You should put a check to ensure the urls are valid. This can be donw by using a comparison using link.startsWith("http://") || link.startsWith("https://")
There are other places also in which you test would fail.
finalList
is declared as a List and returned. This ,must be changed to List and should be populated with the link valued. This is because we you have a for loop in which you are calling driver.get(newLink) which would reset all the WebElement objects in the finalList
since they are found earlier and give an exception.
img
tags do not have href
. Instead use 'src'.
Here is the code after all those changes. Please be aware that there could be other conditions to check whether the URL is valid or not which I have not listed here.
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();
}
}
}
}
Upvotes: 6