Ejemplo n.º 1
0
  private static void changeContentEditableValueInHtmlUnit(
      WebDriver driver, WebElement element, String value) {
    // we resort to JavaScript when it is enabled
    if (((HtmlUnitDriver) driver).isJavascriptEnabled()) {
      JavascriptExecutor js = (JavascriptExecutor) driver;
      js.executeScript(
          "arguments[0]['innerText' in arguments[0] ? 'innerText' : 'textContent'] = arguments[1];",
          element,
          value);
    } else {
      // or use reflection if JS is not enabled
      // (this method is not preferred as it relies on HtmlUnit's internals, which can change
      // without notice)
      try {
        // #HtmlUnit #reflection #hack
        Method getElementMethod =
            org.openqa.selenium.htmlunit.HtmlUnitWebElement.class.getDeclaredMethod("getElement");
        getElementMethod.setAccessible(true);

        HtmlElement he = (HtmlElement) getElementMethod.invoke(element);
        HTMLElement e = (HTMLElement) he.getScriptObject();

        e.setInnerText(value);
      } catch (Exception e) {
        LOGGER.warn("Unable to set HtmlUnitWebElement's innerText.", e);
      }
    }
  }