ドロップダウンメニュー上でマウスオーバー機能を行いたい。メニューにカーソルを合わせると、新しいオプションが表示されます。私はxpathを使って新しいオプションをクリックしようとしました。しかし、メニューを直接クリックすることはできません。だから、手動の方法として私はドロップダウンメニューの上にマウスを移動しようとしているし、新しいオプションをクリックします。
Actions action = new Actions(webdriver);
WebElement we = webdriver.findElement(By.xpath("//html/body/div[13]/ul/li[4]/a"));
action.moveToElement(we).build().perform();
「マウスホバー」アクションを実行することは、実際には不可能です。代わりに、一度に達成したいアクションをすべて連鎖させる必要があります。それで、他を明らかにする要素に移動してください、そして同じ連鎖の間に、今明らかにされた要素に移動して、そしてそれをクリックしてください。
アクションチェーンを使用するときは、「ユーザーのようにする」ことを忘れないでください。
Actions action = new Actions(webdriver);
WebElement we = webdriver.findElement(By.xpath("html/body/div[13]/ul/li[4]/a"));
action.moveToElement(we).moveToElement(webdriver.findElement(By.xpath("/expression-here"))).click().build().perform();
次のことをしようとしても、これらの答えはどれもうまくいきません。
MoveToElementの後に「perform」コマンドを挿入すると、それがその要素に移動し、サブメニュー項目がしばらく表示されますが、それはホバーではありません。隠された要素はそれが見つかる前に即座に消えてElementNotFoundExceptionになります。私は二つのことを試しました:
Actions builder = new Actions(driver);
builder.moveToElement(hoverElement).perform();
builder.moveToElement(clickElement).click().perform();
これは私にはうまくいきませんでした。以下は私のために働いた:
Actions builder = new Actions(driver);
builder.moveToElement(hoverElement).perform();
By locator = By.id("clickElementID");
driver.click(locator);
[アクション]を使用してホバーし、標準のWebDriverをクリックして、ホバーしてから[クリック]することができます。
この ブログ投稿に基づいて、Selenium 2 Webdriverで次のコードを使用してホバリングをトリガーすることができました。
String javaScript = "var evObj = document.createEvent('MouseEvents');" +
"evObj.initMouseEvent(\"mouseover\",true, false, window, 0, 0, 0, 0, 0, false, false, false, false, 0, null);" +
"arguments[0].dispatchEvent(evObj);";
((JavascriptExecutor)driver).executeScript(javaScript, webElement);
このコードは完璧に動作します。
Actions builder = new Actions(driver);
WebElement element = driver.findElement(By.linkText("Put your text here"));
builder.moveToElement(element).build().perform();
マウスオーバー後は、明らかになった情報に対して次の操作を実行できます。
これをどのように実装できるか、この例を確認してください。
public class HoverableDropdownTest {
private WebDriver driver;
private Actions action;
Consumer < By > hover = (By by) - > {
action.moveToElement(driver.findElement(by))
.perform();
};
@Test
public void hoverTest() {
driver.get("https://www.bootply.com/render/6FC76YQ4Nh");
hover.accept(By.linkText("Dropdown"));
hover.accept(By.linkText("Dropdown Link 5"));
hover.accept(By.linkText("Dropdown Submenu Link 5.4"));
hover.accept(By.linkText("Dropdown Submenu Link 5.4.1"));
}
@BeforeTest
public void setupDriver() {
driver = new FirefoxDriver();
action = new Actions(driver);
}
@AfterTest
public void teardownDriver() {
driver.quit();
}
}
詳細な回答については、こちらをチェックしてください - http://www.testautomationguru.com/Selenium-webdriver-automating-hoverable-multilevel-dropdowns/
Protractor(SeleniumのJavaScriptフロントエンド)を使用して、私のJavascriptテストで同じことを実行する方法を探している私は、この質問に気付きました。
分度器1.2.0とWebドライバ2.1で私の解決策:
browser.actions()
.mouseMove(
element(by.css('.material-dialog-container'))
)
.click()
.perform();
これもオフセットを受け入れます(要素の上と左をクリックするために使用します)。
browser.actions()
.mouseMove(
element(by.css('.material-dialog-container'))
, -20, -20 // pixel offset from top left
)
.click()
.perform();
Selenium Java WebDriverを使用してマウスホバーするサンプルプログラム:
public class Mhover {
public static void main(String[] args){
WebDriver driver = new FirefoxDriver();
driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);
driver.get("http://www.google.com");
WebElement ele = driver.findElement(By.id("gbqfba"));
Actions action = new Actions(driver);
action.moveToElement(ele).build().perform();
}
}
あなたが試すことができます
WebElement getmenu= driver.findElement(By.xpath("//*[@id='ui-id-2']/span[2]")); //xpath the parent
Actions act = new Actions(driver);
act.moveToElement(getmenu).perform();
Thread.sleep(3000);
WebElement clickElement= driver.findElement(By.linkText("Sofa L"));//xpath the child
act.moveToElement(clickElement).click().perform();
あなたがウェブに多くのカテゴリがある場合があったら、最初の方法を使用してください。あなたが欲しいメニューのために、あなたはただ第二の方法が必要です。