Ошибка javascript: arguments[0].setAttribute не является функцией

Следующая функция дает мне ошибку -

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'))

Я предполагаю, что Protractor пытается разобрать arguments в контексте executeScript, а не в том контексте, который вы намеревались.

Teemu 28.03.2019 12:18

@Teemu, наверное, да. Любые предложения о том, как с этим справиться?

infinite 28.03.2019 12:19

Извлеките аргументы в их собственные переменные и вместо этого передайте эти переменные.

Teemu 28.03.2019 12:20

@Teemu, ты имеешь в виду что-то вроде const arg0 = 'arguments[0].setAttribute("style", arguments[1]);'; и const arg1 = 'color: Red; border: 2px solid red;'; и прохождения executeScript(arg0, webElement.getWebElement, arg1)?

infinite 28.03.2019 12:31

Нет, вы должны разрешать живые аргументы в той функции, которая передает их вперед.

Teemu 28.03.2019 12:37

@Teemu, был бы признателен, если бы вы опубликовали ответ, поскольку я не могу разобрать.

infinite 28.03.2019 13:15
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
0
6
1 287
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Отключите ворс и попробуйте ниже

/* tslint:disable */
    browser.executeScript("arguments[0].setAttribute('style',arguments[1])", webElement, "color: Red; border: 2px solid red;");
/* tslint:enable */

Надеюсь, это поможет вам

Я не могу отключить tslint, так как это необходимо.

infinite 28.03.2019 14:11

Вы можете отключить для этой конкретной линии. использовать /* tslint:disable */ - Disable all rules for the rest of the file /* tslint:enable */ - Enable all rules for the rest of the file

Madhan Raj 28.03.2019 14:23

Это не работает. Кстати, TS Lint тут ни при чем.

infinite 28.03.2019 14:59

Тогда ладно. Вы пробовали с одиночными queots

Madhan Raj 28.03.2019 15:04

Да, ошибка та же. Пробовал с обоими. Кажется, что-то связанное с транспортиром.

infinite 28.03.2019 15:15
Ответ принят как подходящий

Это должно быть 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);
        });
}

Интересно. Я ушел с ошибкой и теперь не вижу никакой ошибки. Но кое-кто даже не видит, что элемент выделяется. Я пытался выделить таблицу. Однако таблица идентифицируется.

infinite 28.03.2019 15:55

пожалуйста, попробуйте <the table>.setAttribute("style", 'color: Red; border: 2px solid red;') в DevTool вручную, чтобы убедиться, что он работает так, как вы ожидаете.

yong 28.03.2019 16:09

добавьте !important в значение стиля, чтобы сделать данное значение с наивысшим приоритетом

yong 28.03.2019 16:56

Хорошо, сейчас попробую.

infinite 29.03.2019 07:08

Мой плохой, я использовал неправильный объект. Это работает, приятель. Огромное спасибо.

infinite 29.03.2019 08:23

Другие вопросы по теме