Следующая функция дает мне ошибку -
javascript error: arguments[0].setAttribute is not a function
Я действительно не знаю, что я делаю неправильно -
export async function highlightElement(webElement: ElementFinder) {
await browser.driver.executeScript(
'arguments[0].setAttribute("style", arguments[1]);', webElement.getWebElement, 'color: Red; border: 2px solid red;').
then(resp => {
return element;
}).catch(err => {
console.info('Error highlighting element' + err);
});
}
Я пытаюсь выделить веб-элемент на странице, используя его. Я использую одинарные кавычки из-за tslint здесь. Значение, которое я ему передаю, это elementFinder, например
element(by.xpath('//vtable/div/table/tbody'))
@Teemu, наверное, да. Любые предложения о том, как с этим справиться?
Извлеките аргументы в их собственные переменные и вместо этого передайте эти переменные.
@Teemu, ты имеешь в виду что-то вроде const arg0 = 'arguments[0].setAttribute("style", arguments[1]);'; и const arg1 = 'color: Red; border: 2px solid red;'; и прохождения executeScript(arg0, webElement.getWebElement, arg1)?
Нет, вы должны разрешать живые аргументы в той функции, которая передает их вперед.
@Teemu, был бы признателен, если бы вы опубликовали ответ, поскольку я не могу разобрать.



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Отключите ворс и попробуйте ниже
/* tslint:disable */
browser.executeScript("arguments[0].setAttribute('style',arguments[1])", webElement, "color: Red; border: 2px solid red;");
/* tslint:enable */
Надеюсь, это поможет вам
Я не могу отключить tslint, так как это необходимо.
Вы можете отключить для этой конкретной линии. использовать /* tslint:disable */ - Disable all rules for the rest of the file /* tslint:enable */ - Enable all rules for the rest of the file
Это не работает. Кстати, TS Lint тут ни при чем.
Тогда ладно. Вы пробовали с одиночными queots
Да, ошибка та же. Пробовал с обоими. Кажется, что-то связанное с транспортиром.
Это должно быть webElement.getWebElement(), а не webElement.getWebElement, во-вторых, вы должны использовать !important в значении стиля, если другое значение css имеет высокий приоритет.
export async function highlightElement(webElement: ElementFinder) {
await browser.driver.executeScript(
'arguments[0].setAttribute("style", arguments[1]);',
webElement.getWebElement(),
'border: 2px solid red !important;'
).
then(resp => {
return webElement;
}).catch(err => {
console.info('Error highlighting element' + err);
});
}
Интересно. Я ушел с ошибкой и теперь не вижу никакой ошибки. Но кое-кто даже не видит, что элемент выделяется. Я пытался выделить таблицу. Однако таблица идентифицируется.
пожалуйста, попробуйте <the table>.setAttribute("style", 'color: Red; border: 2px solid red;') в DevTool вручную, чтобы убедиться, что он работает так, как вы ожидаете.
добавьте !important в значение стиля, чтобы сделать данное значение с наивысшим приоритетом
Хорошо, сейчас попробую.
Мой плохой, я использовал неправильный объект. Это работает, приятель. Огромное спасибо.
Я предполагаю, что Protractor пытается разобрать
argumentsв контекстеexecuteScript, а не в том контексте, который вы намеревались.