package com.codeborne.selenide.impl;
import org.openqa.selenium.StaleElementReferenceException;
import org.openqa.selenium.WebElement;
import java.util.logging.Logger;
import static com.codeborne.selenide.Selenide.executeJavaScript;
import static com.codeborne.selenide.WebDriverRunner.supportsJavascript;
public class Events {
private static final Logger log = Logger.getLogger(Events.class.getName());
public static Events events = new Events();
public void fireChangeEvent(WebElement element) {
if (supportsJavascript()) {
fireEvent(element, "change");
}
else {
log.fine("Cannot trigger change event: browser does not support javascript");
}
}
public void fireEvent(WebElement element, final String... event) {
try {
final String jsCodeToTriggerEvent =
"var webElement = arguments[0];\n" +
"var eventNames = arguments[1];\n" +
"for (var i = 0; i < eventNames.length; i++) {" +
" if (document.createEventObject) {\n" + // IE
" var evt = document.createEventObject();\n" +
" webElement.fireEvent('on' + eventNames[i], evt);\n" +
" }\n" +
" else {\n" +
" var evt = document.createEvent('HTMLEvents');\n " +
" evt.initEvent(eventNames[i], true, true );\n " +
" webElement.dispatchEvent(evt);\n" +
" }\n" +
'}';
executeJavaScript(jsCodeToTriggerEvent, element, event);
} catch (StaleElementReferenceException ignore) {
}
}
}