2017-10-07 155 views
-1

我试图点击菜单下拉列表中的链接。硒似乎能够找到元素。但不能点击它,并给予以下异常:线程“main” org.openqa.selenium.ElementNotInteractableExceptionSelenium - 无法点击下拉列表中的链接

例外:不能元素

点击我使用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> 

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

+0

请您花几分钟时间正确格式化并缩进您的HTML,以便可以阅读。你没有指出错误发生在哪一行。 – JeffC

回答

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”元素之后并尝试单击第二个元素之后,请执行此操作。

-1
  1. 确定选择HTML元素:

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

    或直接传递到选择的元素:

    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/

0

感谢您的回复。

这个问题似乎是,硒点击菜单后,列表显示并再次消失。所以我用来点击菜单下拉列表中的链接的第二个findElement没有工作,因为硒无法找到元素。

我能通过进行硒悬停在菜单,然后点击第一个链接列表

下面就来解决这个问题是我使用的代码:

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