您可以使用以下方法模拟悬停事件
public static void HoverOn(this RemoteWebDriver driver, IWebElement elementToHover)
{
var action = new Actions(driver);
action.MoveToElement(elementToHover).Perform();
}
然而,动态切换元素上的点击事件可能会导致很多麻烦。为了获得非常稳定的点击事件模拟,我使用以下代码
public static void ClickOn(this RemoteWebDriver driver, IWebElement expectedElement)
{
try
{
expectedElement.Click();
}
catch (InvalidOperationException)
{
if (expectedElement.Location.Y > driver.GetWindowHeight())
{
driver.ScrollTo(expectedElement.Location.Y + expectedElement.Size.Height);
Thread.Sleep(500);
}
driver.WaitUntil(SearchElementDefaultTimeout, (d) => driver.IsElementClickable(expectedElement));
expectedElement.Click();
}
}
private static bool IsElementClickable(this RemoteWebDriver driver, IWebElement element)
{
return (bool)driver.ExecuteScript(@"
window.__selenium__isElementClickable = window.__selenium__isElementClickable || function(element)
{
var rec = element.getBoundingClientRect();
var elementAtPosition = document.elementFromPoint(rec.left, rec.top);
return element == elementAtPosition;
};
return window.__selenium__isElementClickable(arguments[0]);
", element);
}
此代码是可维护 Selenium 项目的一部分。您可以查看项目站点以获取有关使用 Selenium 创建可维护 UI 测试的更多信息https://github.com/cezarypiatek/MaintainableSelenium/