2017-10-07 117 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();