LINUX.ORG.RU

copy-paste в PhantomJS с Selenium

 , , ,


2

2

Добрый день.

Хотелось узнать у знающих людей, есть ли возможность copy-paste в PhantomJS? Сейчас в своих тестах я использую Firefox с Xvfb, выделяю элемент по id, посылаю ему сначала:

Keys.CONTROL 'a'
(выполняем выделение элемента)

Потом:

Keys.CONTROL, 'c'
(копирование выделенного элемента)

И потом уже выполняю на странице с формой:

Keys.CONTROL, 'v'

Судя по всему информация из браузера копируется в буфер обмена Иксов(xvfb), но в phantomjs нет поддержки Иксов. Вот, собственно, и мой вопрос - есть ли возможность в PhantomJS использовать буфер обмена?

не проще ли доставать содержимое по xpath, а потом средствами питона кидать в буфер ? или по ТЗ надо именно вебдрайвером копипастить ?

Dred ★★★★★
()
Ответ на: комментарий от gIiIjony

Нужно больше конкретики. Почему например просто не взять и получить значение/текст сразу из элемента?

el = driver.find_element_by_xpath('//input[@id="source"]')
value = el.text
# value = el.get_attribute('value')

Ну а потом отправляешь это в форму:

driver.find_element_by_xpath('//input[@name="target"]').send_keys(value)

Kilte ★★★★★
()
Ответ на: комментарий от Kilte

Хромом я пытался, но столкнулся с проблемой - он говорил что-то вроде «элемент не в фокусе», на который мне нужно было послать сочетание клавишь. Я погуглил, некоторые люди пишут что нужно сначала кликнуть на элемент - я это сделал, но Хром так и говорил, что элемент не в фокусе. Если кто-то подкинет решение этой проблемы - был бы очень благодарен.

Да, Хром чуть быстрей, и ещё у него есть хорошая фича - можно указать порт для chromedriver. Когда я запускаю много Firefox, то они валятся, то ли из-за занятости порта, то ли из-за чего-то ещё.

gIiIjony
() автор топика
Ответ на: комментарий от gIiIjony

нужно сначала кликнуть на элемент

Это всё фигня.

А как понять не в фокусе? Какое исключение было выброшено?

Kilte ★★★★★
()
Ответ на: комментарий от Kilte
>>> all.send_keys(Keys.CONTROL, 'a')
Traceback (most recent call last):
  File "<input>", line 1, in <module>
  File "/usr/local/lib/python2.7/dist-packages/selenium/webdriver/remote/webelement.py", line 322, in send_keys
    self._execute(Command.SEND_KEYS_TO_ELEMENT, {'value': typing})
  File "/usr/local/lib/python2.7/dist-packages/selenium/webdriver/remote/webelement.py", line 448, in _execute
    return self._parent.execute(command, params)
  File "/usr/local/lib/python2.7/dist-packages/selenium/webdriver/remote/webdriver.py", line 196, in execute
    self.error_handler.check_response(response)
  File "/usr/local/lib/python2.7/dist-packages/selenium/webdriver/remote/errorhandler.py", line 181, in check_response
    raise exception_class(message, screen, stacktrace)
WebDriverException: Message: unknown error: cannot focus element
  (Session info: chrome=44.0.2403.130)
  (Driver info: chromedriver=2.16.333244 (15fb740a49ab3660b8f8d496cfab2e4d37c7e6ca),platform=Linux 3.16.0-4-686-pae x86)

gIiIjony
() автор топика
Ответ на: комментарий от gIiIjony

Ни разу не сталкивался. Тут только методом тыка как мне кажется. Раз клик не помогает, можно попробовать средствами JS сделать что-то. focus() вызвать например, или сразу с помощью js текст вставить.

Kilte ★★★★★
()
Ответ на: комментарий от Kilte

с js особо не знаком, попробовал:

browser.execute_script("document.getElementById('all').focus()")

после этого сделал send_keys, но ничего особо не поменялось.

gIiIjony
() автор топика
11 сентября 2015 г.
Ответ на: комментарий от gIiIjony

Иногда невозможно сфокусироваться на элементе, потому что у него меняется класс после клика, так что надо sendKeys посылать в новый элемент

anonymous
()
27 ноября 2015 г.
Ответ на: комментарий от anonymous

Не, там простой html, без js, ничего не меняется. Ответил спустя кучу времени :)

mahalaka ★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.