shaD
shaD

Reputation: 31

Selenium - Unable to click on link from dropdown list

I am trying to click on a link from a dropdown list in the menu. Selenium seems to be able to find the element. But not able to click on it and giving the below exception:

Exception in thread "main" org.openqa.selenium.ElementNotInteractableException: Cannot click on element

I am using IEDriver to run the code.

Below is the java code I am using to find and click on the element:

File file = new File("C:\\IEDriverServer.exe");
System.setProperty("webdriver.ie.driver", file.getAbsolutePath());          
WebDriver driver = new InternetExplorerDriver();        
driver.manage().window().maximize();
driver.get("url");
driver.findElement(By.xpath("//*[@id=\"Ul1\"]/li[2]/a")).click();           
driver.findElement(By.xpath("//*[@id=\"Ul1\"]/li[2]/ul/li[1]/a")).click();

Below is the HTML body:

<body><ul class="sf-menu" id="Ul1"><li class = "current"><a target="bodyFrame" href="http://hostname.default.aspx">Home</a><ul></ul></li><li class = "current"><a href="#Create UsageMenu">Create Usage</a><ul><li class="current"><a target="bodyFrame" href="../SAMPLEAPPDT/Usage.htm" title="Usage Generator (SAMPLEAPP Rating)"">Usage Generator</a>              <ul></ul></li><li class="current"><a target="bodyFrame" href="../NETWORKUG/network_usage/NETWORKUsageUpload.aspx?appId=1" title="NETWORK"">NETWORK</a><ul></ul></li><li class="current"><a target="bodyFrame" href="../NETWORKUG/network_usage/NETWORKUsageUpload.aspx?appId=2" title="RSS Usage Generator"">RSS</a><ul></ul></li></ul></li></ul><iframe name="bodyFrame" id="bodyFrame"  src="" width="100%" frameborder="no"></iframe></body>

Please let me know what could be the issue

Upvotes: 1

Views: 5602

Answers (4)

Rinty Begum
Rinty Begum

Reputation: 11

Java with Selenium Webdriver: Unable to click On the link list but I am able to print out all the link. I also tried to click on the link using : linktext, href,JS, xpath, CSS, action.double click and click. //this is my code

WebElement hometab=driver.findElement(By.xpath("//*[@id='new_nav']/li[1]/a"));
            hometab.click();
            List<WebElement> homelist1=driver.findElements(By.xpath("//ul/ul/li[1]/ul/li/a"));
                    int allLinks =  homelist1.size();

                    for(int i=0;i<=allLinks;i++) {
                        List<WebElement> homelis=driver.findElements(By.xpath("//*[@id='main_form']/div[2]/div/ul/ul/li[1]/ul/li"));
                        WebElement homelis11=driver.findElement(By.xpath("//ul/ul/li[1]/ul/li[1]"));

                        System.out.println(homelis.get(i).getText());
                        WebElement element = homelis.get(i);
                        System.out.println(homelis.get(i));
                        System.out.println(homelis.get(i).getText());
                        homelis11.click();
                        element.submit();

                        System.out.println("Inside action class");
                    Actions actions = new Actions(driver);
                actions.moveToElement(homelis11).click().build().perform();

                        System.out.println("JS click ");
                        //js click
                        JavascriptExecutor exec = (JavascriptExecutor) driver;
                        exec.executeScript("arguments[0].click()", homelis11);

                        //verify the text on that page 
                        WebElement textq=driver.findElement(By.xpath("//h1"));
                        System.out.println(textq.getText()+UIActions.tab);
                        //back to home page with all the menu list
                        driver.navigate().back();
                        Thread.sleep(15);

Upvotes: 1

shaD
shaD

Reputation: 31

Thanks for the responses.

The issue seems to be that after selenium clicks on the menu, the list shows up and disappears again. So the second findElement i was using to click on the link in the menu dropdown was not working since selenium is not able to find the element.

I was able to resolve the issue by making selenium hover over the menu and clicking on the first link in the list

Below is the code I used:

Actions action = new Actions(driver);
        WebElement webelement = driver.findElement(By.xpath("//*[@id=\"Ul1\"]/li[2]/a"));
        action.moveToElement(webelement).moveToElement(driver.findElement(By.xpath("//*[@id=\"Ul1\"]/li[2]/ul/li[1]/a"))).click().build().perform();

Upvotes: 1

R. Curtiss
R. Curtiss

Reputation: 1

  1. Identify the select HTML element:

    WebElement mySelectElement = driver.findElement(By.id("mySelect"));
    Select dropdown= new Select(mySelectElement);
    

    or pass it directly to the Select element:

    dropdown = new Select(driver.findElement(By.id("mySelect")));
    
  2. To select an option you can do: All select/deselect methods will throw NoSuchElementException if no matching option elements are found. Select by Visible Text (select all options that display text matching the argument):

    dropdown.selectByVisibleText("Italy");
    

    or

    Select by Index (select the option at the given index. This is done by examining the “index” attribute of an element, and not merely by counting):

    dropdown.selectByIndex(2);
    

http://loadfocus.com/blog/2016/06/13/how-to-select-a-dropdown-in-selenium-webdriver-using-java/

Upvotes: -1

ggradnig
ggradnig

Reputation: 14169

Assuming you are using some JavaScript code to open/close this dropdown, you might need to wait for the dropdown to open before you can select the element because it is not yet visible. Your second "click" might be too fast after the first one.

For example, you can implicitely wait for a certain amount of time like so:

driver.manage().timeouts().implicitlyWait(1, TimeUnit.SECONDS);

A better alternative would be to wait for your element to be visible like this:

WebDriverWait webDriverWait = new WebDriverWait(driver, 10);
webDriverWait.until(ExpectedConditions.visibilityOfElementLocated(By.xpath("//*[@id=\"Ul1\"]/li[2]/ul/li[1]/a")));

Do this after you click the first "a" element and before you try to click on the second.

Upvotes: 1

Related Questions