2014-08-18 2 views
5

Использовал сценарий selenium python для запуска сервера selenium для запуска кода JavaScript. Он работает нормально.Selenium Python bindings: как выполнить JavaScript на элементе?

drv.execute_script('<some js code>') 

Однако, я не могу понять, как запустить код яваскрипта на элемент, который был извлечен с помощью get_element_by _ *() API. Например, я

ele = get_element_by_xpath('//button[@id="xyzw"]'); 
#question: how do I change the "style" attribute of the button element? 

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

ele = $x('//button[@id="xyzw"]')[0] 
ele.setAttribute("style", "color: yellow; border: 2px solid yellow;") 

Просто не знаю, как это сделать в Python селеном сценария. Спасибо заранее.

+0

Посмотрите на интерфейс [JavascriptExecutor] (https://selenium.googlecode.com/git/docs/api/java/org/openqa/selenium/JavascriptExecutor.html) в 'Selenium'. – Brian

+0

Спасибо @Brian за ссылку. Это для привязки Java, тем не менее, это заставляет меня понять, что означает «аргументы» в рабочем решении «... arguments [0] .setAttribute (....)». Он используется javascript для ссылки на параметр функции (esp, когда число параметров для переменной является переменной). – packetie

+0

Нет проблем. Я люблю делиться знаниями. – Brian

ответ

6

execute_script принимает аргументы, так что вы можете передать элемент:

drv.execute_script('arguments[0].setAttribute("style", "color: yellow; border: 2px solid yellow;")', ele) 
+0

спасибо за быстрый ответ. Я пробовал drv.execute_script (аргументы [0] .setAttribute («стиль», «цвет: желтый, граница: 2px сплошной желтый»), ele); но получил ошибку: имя «аргументы» не определено. Любая идея почему? – packetie

+1

Оказалось, что я пропустил одиночную кавычку: drv.execute_script ('arguments [0] .setAttribute ("style", "color: yellow; border: 2px solid yellow;")', ele) Hi @Richard, можете ли вы обновить свой ответ, чтобы я мог его принять? – packetie

+0

@codingFun Я как бы чувствую, что я только что получил от вас часть пути, вы тот, кто принял мой синтаксически неправильный ответ и понял правильный синтаксис. Сказав это, если вы все еще готовы принять мой ответ, все в порядке. – Richard

0

Благодаря ответу по @Richard, который привел меня в правильном направлении и ссылки Брайана (даже подумал, что это для Java), который помог мне выяснить значение «аргументов».

Следующий код сделает то, что мне нужно.

ele = get_element_by_xpath('//button[@id="xyzw"]'); 
drv.execute_script('arguments[0].setAttribute("style", "color: yellow; border: 2px solid yellow;")', ele) 
Смежные вопросы