Javascript, расширяющий веб-драйвер Selenium RadMenu C#
Я использую Selenium WebDriver в C#. У меня есть RadMenu, в котором я хочу зависнуть, как только я это сделаю; это должно расширить подменю, которое имеет определенный элемент, который я хочу щелкнуть. Мне нужно использовать JavaScript, чтобы щелкнуть по элементу, но это, кажется, не расширяет меню, есть ли какие-либо команды сценариев Java, которые я могу использовать для этого. Например:
IJavaScriptExecutor js = ts.getDriver() as IJavaScriptExecutor;
js.ExecuteScript("arguments[0].style.display='block'",leftPane_Customer);
js.ExecuteScript("arguments[0].click()", leftPane_Customer);
js.ExecuteScript("arguments[0].scrollIntoView(true);",leftPane_Customer);
.click(), кажется, выделяет первое меню, но это насколько я могу получить. Может ли кто-нибудь предложить решение (включая синтаксис JavaScript) для расширения подменю?
Спасибо
1 ответ
Вы можете смоделировать событие при наведении, используя метод следующим образом
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);
}
Этот код является частью проекта Maintainable Selenium. Вы можете просмотреть сайт проекта, чтобы получить больше информации о создании поддерживаемых тестов пользовательского интерфейса с Selenium https://github.com/cezarypiatek/MaintainableSelenium/