Selenium 2.31を使用しました。
マウスの動きにActionsクラスを使用しました。これを使用して、マウスをメニューの上に移動すると、そのサブメニューは、Firefoxの古いバージョンとは異なり、ほんの一瞬だけ表示されました。
この問題のため、driver.findElement
を使用してサブメニューを選択することはできません。例外がスローされ、「要素をビューにスクロールできません」という例外がスローされます。
これに対する解決策はありますか?
アクションオブジェクトでは、最初にメニュータイトルを移動してから、ポップアップメニュー項目に移動してクリックする必要があります。最後にactions.perform()
を呼び出すことを忘れないでください。サンプルJavaコード:
Actions actions = new Actions(driver);
WebElement menuHoverLink = driver.findElement(By.linkText("Menu heading"));
actions.moveToElement(menuHoverLink);
WebElement subLink = driver.findElement(By.cssSelector("#headerMenu .subLink"));
actions.moveToElement(subLink);
actions.click();
actions.perform();
これを回避する別の方法は、SeleniumのJavaScript Executorを使用して、要素のスタイルを強制的に表示することです。
この例は、C#のこの行に沿ったものです。
//Use the Browser to change the display of the element to be shown
(IJavaScriptExecutor)driver).ExecuteScript("document.getElementById('myId').stlye.display="block");
//navigate to your link that is now viewable
driver.FindElement(By.Xpath('//LinkPath')).Click();
そこから、エレメントへのXPathを見つけ、Seleniumを使用してエレメントをクリックします。これをカスケードして、メイン要素の子も見つけることができます
//(IJavaScriptExecutor)ffbrowser).ExecuteScript("document.getElementById('myId').children[1].children[1].style.display='block'");
これは、ホバーしたときに表示スタイルを変更するホバー要素がある場合にのみ可能であることに注意してください。
このコードを試してみてください...シャープなコードです...
//Webelement is the main menu Link
webElement = driver.FindElement(By.XPath("Your element xpath"));
Actions act = new Actions(driver);
act.MoveToElement(webElement).Perform();//This opens menu list
System.Threading.Thread.Sleep(5000);//This line will help you to hold menu
//This web element is the sub menu which is under main menu
webElement = driver.FindElement(By.XPath("Sub menu path"));
act.MoveToElement(webElement).Perform();//This opens menu list
System.Threading.Thread.Sleep(5000);//Holds menu
//This web element is the option you have to click
webElement = driver.FindElement(By.XPath("Path"));
webElement.Click();
これは、Rubyを使用している場合に役立ちます。
1.まず、xpathまたはidで要素を見つける必要があります。
2.次に、action.move_to()。performメソッドを使用します。
コードは次のとおりです。
hover = WAIT.until{$driver.find_element(:xpath,"xpath")}
driver.action.move_to(hover).perform
この答えは私の問題を解決するのに役立ちました。
私の挑戦は、メニューオプションの下にリンクを見つけることでした。メニューにカーソルを合わせるまで、リンクは表示されませんでした。
私にとってこの重要な部分は、メニューにカーソルを合わせることに加えて、次にリンクにカーソルを合わせて操作する必要があることを発見することでした。
List<WebElement> list = driver.findElements(By.xpath("//a"));
for (int i=0;i<list.size();i++){
if(list.get(i).getText().equalsIgnoreCase("cacique intimates M"))
{
new Actions(driver).moveToElement(list.get(i)).click().build().perform();
System.out.println("Clicked on Parent Category");
new Actions(driver).moveToElement(list.get(i)).moveToElement(driver.findElement(By.linkText("SPECIALTY BRAS"))).click().build().perform();
break;
}
}