executeJavaScript не возвращает должное значение, возвращаемое JavaScript-кодом на деле

Написал JavaScript который возвращает элемент:

document.querySelector("main.message__body")

далее так: executeJavaScript("document.querySelector('main.message__body')") И возвращается null.

А попробуйте добавить .toString();

не помогло

А попробуте добавить тогда сюда .text
По идее, если у элемента есть текст, то он должен его вывести.
Ну и кавычки должны же быть двойные… Надо их экранировать.

@sevnight

надо добавить return
executeJavaScript(“return document.querySelector(‘main.message__body’)”)

1 лайк

return на удивление помог) а вы знаете как вернуть SelenideElement, чтобы дальше можно было с ним работать?)

А что именно вы хотите с ним сделать?

с помощью String.fromat() я формирую вот такой js и применяю.

return document.evaluate("//main[contains(@class,'message__body') and contains(.,'Куплю')]//li[contains(.,'Кол-во')]/p[@class='list__value']", document, null, XPathResult.FIRST_ORDERED_NODE_TYPE, null).singleNodeValue.innerHTML.match(/40(.|,)8/);

как видите, я проверяю что в нужном месте отображается нужное число. заморочено так из-за того что разделителем может быть и запятая и точка. конечно смотря на этот длинный код формирования скрипта и его не работы, я начинаю думать что сделать через or дубль с двумя разделителями не такая плохая идея была)

Стало просто интересно как вернуть Element с которым можно работать с помощью Selenide или Selenium. думаю узнав это все проблемы решатся

Лично я использую jQuery.

На C# возвращается IWebElement, думаю что по аналогии должно быть и на Java, вернётся интерфейс WebElement.

Такой код:

var ele = $(arguments[0]);
return ele;

Если не сработает, то всегда можно попробовать вернуть чистый элемент:

var ele = $(arguments[0])[0];
return ele;

Только необходимо, чтобы jQuery был на странице.
Если его там нет, вы перед вызовом этой функции можете его туда добавить

var ele = document.createElement("script");
ele.src = "https://ajax.aspnetcdn.com/ajax/jQuery/jquery-3.3.1.min.js";
var head = document.getElementsByTagName("head")[0];
head.appendChild(ele);
1 лайк