2017-10-07 6 views
-1

メニューのドロップダウンリストからリンクをクリックしようとしています。セレンはその元素を見つけることができるようです。しかし、それをクリックすると、以下の例外を与えることができません:スレッド「メイン」org.openqa.selenium.ElementNotInteractableExceptionでSelenium - ドロップダウンリストからリンクをクリックできません

例外:私は、コードを実行するために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コードを使用していると仮定すると、ドロップダウンが開いてから要素が選択されるのを待つ必要があります。あなたの2番目の「クリック」は、最初のクリックの後に速すぎるかもしれません。

たとえば、あなたは、暗黙的にそのような時間の一定 量を待つことができます。

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"要素をクリックした後、2番目の要素をクリックする前にこれを行います。

-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

お返事ありがとうございます。

セレンがメニューをクリックすると、リストが表示され、再び消えてしまうようです。そこで、セレンが要素を見つけることができないので、メニュードロップダウンのリンクをクリックするために使用していた2番目の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(); 
関連する問題