Bir açılır menü üzerinde mouseover işlevi yapmak istiyorum. Menünün üzerine geldiğimizde yeni seçenekleri gösterecek. Xpath kullanarak yeni seçeneklere tıklamaya çalıştım. Ancak menülere doğrudan tıklayamıyorum. Bu yüzden, manuel yol olarak açılır menünün üzerine gelmeye çalışıyorum ve ardından yeni seçeneklere tıklayacağım.
Actions action = new Actions(webdriver);
WebElement we = webdriver.findElement(By.xpath("//html/body/div[13]/ul/li[4]/a"));
action.moveToElement(we).build().perform();
Bir 'mouse hover' eylemi gerçekleştirmek gerçekten mümkün değildir, bunun yerine elde etmek istediğiniz tüm eylemleri tek seferde zincirlemeniz gerekir. Yani diğerlerini ortaya çıkaran öğeye gidin, ardından aynı zincir sırasında, şimdi ortaya çıkan öğeye gidin ve üzerine tıklayın.
Eylem Zincirlerini kullanırken 'bir kullanıcının yapacağı gibi yapmayı' unutmamalısınız.
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();
Aşağıdakileri yapmaya çalışırken bu yanıtların hiçbiri işe yaramaz:
moveToElement'ten sonra bir 'perform' komutu eklerseniz, öğeye gider ve alt menü öğesi kısa bir süre için gösterilir, ancak bu bir hover değildir. Gizli öğe bulunamadan hemen kaybolur ve ElementNotFoundException ile sonuçlanır. İki şey denedim:
Actions builder = new Actions(driver);
builder.moveToElement(hoverElement).perform();
builder.moveToElement(clickElement).click().perform();
Bu benim için işe yaramadı. Aşağıdaki benim için çalıştı:
Actions builder = new Actions(driver);
builder.moveToElement(hoverElement).perform();
By locator = By.id("clickElementID");
driver.click(locator);
Üzerine gelme eylemlerini ve standart WebDriver tıklamasını kullanarak üzerine gelip tıklayabiliyordum.
Bu ]1 blog yazısına dayanarak Selenium 2 Webdriver ile aşağıdaki kodu kullanarak hovering özelliğini tetikleyebildim:
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);