17

私はセレン2.31を使用しました。

マウスの動きにActionsクラスを使用しました。これを使用して、マウスをメニューの上に移動すると、古いバージョンのFirefoxとは異なり、そのサブメニューがほんの一瞬しか表示されませんでした。

driver.findElementこの問題のため、 「要素をスクロールして表示できません」という例外がスローされるため、を使用してサブメニューを選択できません。

これに対する解決策はありますか?

4

6 に答える 6

32

アクションオブジェクトを使用して、最初にメニュータイトルを移動し、次にポップアップメニュー項目に移動してクリックする必要があります。最後に電話することを忘れないでください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();
于 2013-03-11T22:04:15.280 に答える
3

これを実行する別の方法は、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を見つけ、セレンを使用して要素をクリックできます。これをカスケードして、メイン要素の子を見つけることもできます

//(IJavaScriptExecutor)ffbrowser).ExecuteScript("document.getElementById('myId').children[1].children[1].style.display='block'");

これは、ホバーしたときに表示スタイルを変更するホバー要素がある場合にのみ可能であることに注意してください。

于 2013-08-26T16:30:20.757 に答える
3

このコードを試してください...それはcシャープコードです...

//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();
于 2013-12-13T10:24:17.070 に答える
1

これは、Rubyを使用している場合に役立ちます。

1.まず、xpathまたはidで要素を見つける必要があります。

2.次に、メソッドaction.move_to()。performを使用します。

コードは次のとおりです。

    hover = WAIT.until{$driver.find_element(:xpath,"xpath")}
    driver.action.move_to(hover).perform
于 2014-02-28T11:41:21.353 に答える
0

この答えは私の問題を解決するのに役立ちました。

私の挑戦は、メニューオプションの下にリンクを見つけることでした。メニューにカーソルを合わせるまで、リンクは表示されませんでした。

私にとってこの重要な部分は、メニューにカーソルを合わせるだけでなく、次にリンクを操作するためにリンクにカーソルを合わせる必要があることを発見したことです。

于 2013-06-12T03:50:22.177 に答える
0
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;
    }                           
    }
于 2016-06-03T21:52:30.160 に答える