1

我正在尝试单击菜单下拉列表中的链接。硒似乎能够找到元素。但无法单击它并给出以下异常:

线程“主”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

4 回答 4

1

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

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);
于 2018-06-10T04:01:10.050 回答
1

感谢您的回复。

问题似乎是 selenium 单击菜单后,列表显示并再次消失。因此,我用来单击菜单下拉菜单中链接的第二个 findElement 不起作用,因为 selenium 无法找到该元素。

我可以通过将 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();
于 2017-10-08T14:45:41.577 回答
1

假设您正在使用一些 JavaScript 代码打开/关闭此下拉菜单,您可能需要等待下拉菜单打开才能选择元素,因为它尚不可见。在第一次“点击”之后,您的第二次“点击”可能太快了。

例如,您可以像这样隐式地等待一段时间:

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

在您单击第一个“a”元素之后并尝试单击第二个元素之前执行此操作。

于 2017-10-07T19:17:39.570 回答
-1
  1. 识别 select HTML 元素:

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

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

    dropdown = new Select(driver.findElement(By.id("mySelect")));
    
  2. 要选择一个选项,您可以执行以下操作:如果未找到匹配的选项元素,所有选择/取消选择方法都将抛出 NoSuchElementException。按可见文本选择(选择显示与参数匹配的文本的所有选项):

    dropdown.selectByVisibleText("Italy");
    

    或者

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

    dropdown.selectByIndex(2);
    

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

于 2017-10-07T19:21:05.287 回答