Selenium JavascriptExecutor - Неожиданный токен при алгоритме javascript - PullRequest
0 голосов
/ 03 февраля 2020

Я пытаюсь выполнить этот java код

WebDriverWait wait = new WebDriverWait(driver, 10);
WebElement hoverElement = wait.until(ExpectedConditions.presenceOfElementLocated(By.xpath("//div[@id = 'demo']")));

//trigger mouseover on hoverElement
//return innerHTML of element which appear
String jsAlg = "" +
    "if(document.createEvent){" +
        "var evObj = document.createEvent('MouseEvents');" +
        "evObj.initEvent('mouseover', true, false);" +
        "arguments[0].dispatchEvent(evObj);" +
    "}else if(document.createEventObject){" +
        "arguments[0].fireEvent('onmouseover');" +
    "}" +
    "var target = new XPathEvaluator().createExpression(//div[@id = 'target'])" +
                                        ".evaluate(document, XPathResult.FIRST_ORDERED_NODE_TYPE)" +
                                        ".singleNodeValue" +
    "return target.innerHTML;";

String targetHTML = (String)((JavascriptExecutor)driver).executeScript(jsAlg, hoverElement);

System.out.println(targetHTML);

Я пытаюсь выполнить это js на этом html

<html>
    <head>
    </head>
    <body>
        <div id="demo" onmouseover="mouseOver()" onmouseout="mouseOut()">Mouse over here</div>

        <script>

            var node = document.createElement("div");
            node.id = "target";
            node.innerHTML = "mouse over active";

            function mouseOver() {
              document.body.appendChild(node);
            }

            function mouseOut() {
              document.body.removeChild(node);
            }

        </script>

    </body>
</html>

Я получаю ошибку при попытке выполнить jsAlg: javascript error: Unexpected token '}'

Что не так в jsAlg?

Редактировать 1

Проблема в var target = ....

Я заменил это на var target = document.getElementById('target'); и работаю.

Но мне нужно использовать XPathEvaluator, потому что я выполняю это js в другом случае, где target не имеет id и может идентифицировать его с xpath.

Редактировать 2 (я нашел реальную проблему)

Проблема была в .createExpression(//div[@id = 'target'])

Это должно быть .createExpression(\"//div[@id = 'target']\")

Параметр должен быть между "

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...