Selenium - 无法从下拉列表中单击链接

时间:2017-10-07 19:08:33

标签: java html selenium selenium-webdriver selenium-iedriver

我想点击菜单中下拉列表中的链接。 Selenium似乎能够找到这个元素。但是无法点击它并给出以下例外:

线程中的异常" main" org.openqa.selenium.ElementNotInteractableException:无法点击元素

我正在使用IEDriver来运行代码。

下面是我用来查找的java代码,然后点击元素:

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();

以下是HTML正文:

<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>

请让我知道可能是什么问题

4 个答案:

答案 0 :(得分:1)

假设您使用某些JavaScript代码打开/关闭此下拉列表,您可能需要等待下拉列表打开才能选择该元素,因为它尚不可见。你的第二个&#34;点击&#34;在第一个之后可能太快了。

例如,您可以隐含地等待某个 像这样的时间:

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

更好的选择是等待你的元素可见:

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

点击第一个&#34; a&#34>后执行此操作在您尝试单击第二个元素之前。

答案 1 :(得分:1)

使用Selenium Webdriver的Java:无法单击链接列表但我能够打印出所有链接。 我还试图点击链接使用:linktext,href,JS,xpath,CSS,action.double点击并点击。 //这是我的代码

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);

答案 2 :(得分:0)

感谢您的回复。

问题似乎是在菜单上点击硒后,列表会显示并再次消失。所以第二个findElement我用来点击菜单下拉菜单中的链接是行不通的,因为selenium无法找到该元素。

我能够通过将硒悬停在菜单上并点击列表中的第一个链接来解决问题

以下是我使用的代码:

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();

答案 3 :(得分:-1)

  1. 标识选择HTML元素:

    dropdown.selectByVisibleText("Italy");
    

    或直接将其传递给Select元素:

    dropdown.selectByIndex(2);
    
  2. 要选择一个选项,您可以执行以下操作: 如果未找到匹配的选项元素,则所有select / deselect方法都将抛出NoSuchElementException。 按可见文本选择(选择显示与参数匹配的文本的所有选项):

    If

    按索引选择(选择给定索引处的选项。这是通过 检查元素的“index”属性,而不仅仅是通过计数):

    function add1() {
        var size = 8;
        var widthOfGrid = size;
        var lenthOfGrid = size;
        var linenumber = 1;
        for (i = 1; i <= size; i += 1) {
            for (j = 1; j <= size; j += 1) {
                if(i % 2 === 0)
                {
                    console.log(" " + "#");
                }
            else
                {
                    console.log("#" + " ");
                }
            }
        }
    }
    
  3. http://loadfocus.com/blog/2016/06/13/how-to-select-a-dropdown-in-selenium-webdriver-using-java/

相关问题