Заполните текстовое поле кодом bb в Selenium Python - PullRequest
0 голосов
/ 07 ноября 2019

Я создаю тест для форума и хотел бы протестировать BB-код форума. У меня есть BB-код, подобный этому,

[B][FONT=Trebuchet MS][SIZE=7]Meteor[/SIZE][/FONT][/B]
[COLOR=#000000][FONT=Verdana][I][B][SIZE=4]n: [/B][/I][/FONT]
[S][B][FONT=Verdana]ki[/SIZE][/FONT][/B][/S][/COLOR]
[URL='https:///coral-lps-6/']
[FONT=Impact][SIZE=7][COLOR=#F41600][U]CLICK HERE TO BUY![/U][/COLOR][/SIZE][/FONT][/URL]

Я пытаюсь заполнить этот код в текстовой области (в теге p) следующим образом:

messageBox = self.browser.find_elements_by_css_selector('.message-editorWrapper p')[0]
code = r"{}".format(bb_code)
self.browser.execute_script("arguments[0].innerHTML = '"+code+"'", messageBox)

Я получаю эту ошибку

Traceback (последний вызов был последним): файл "login.py", строка 51, в bot.postRequest () Файл "login.py", строка 31, вpostRequest self.browser.execute_script ("arguments [0] .innerHTML = '" + code + "'", messageBox) Файл "/usr/local/lib/python3.6/dist-packages/selenium/webdriver/remote/webdriver. py ", строка 636, в execute_script 'args': convert_args}) ['value'] File" /usr/local/lib/python3.6/dist-packages/selenium/webdriver/remote/webdriver.py ", строка 321, в исполняемом файле self.error_handler.check_response (response) "/usr/local/lib/python3.6/dist-packages/selenium/webdriver/remote/errorhandler.py", строка 242, в check_response поднять исключительный_класс (сообщение, экран, stacktrace) selenium.common.exceptions.WebDriverException: Сообщение: неизвестная ошибка: Runtime.evaluate выбросило исключение: SyntaxError: Invalid or неожиданный токен (информация о сеансе: chrome = 70.0.3538.77) (информация о драйвере: chromedriver = 73.0.3683.68 (47787ec04b6e38e22703e856e101e840b65afe72), платформа = Linux 4.15.0-66-generic x86_64)

но когда Iиспользуйте простой текст, который работает нормально. Итак, как я могу добавить BB-КОД на форуме, чтобы проверить, работает ли он или не использует selenimum.

1 Ответ

1 голос
/ 07 ноября 2019

Я угадаю.

Вы помещаете код в ' ' в innerHTML='...', но внутри BB-кода у вас также есть ' в [URL='https:///coral-lps-6/'], и, вероятно, это может создать проблему. Он может создать неправильный код JavaScript, например

'code'https:///coral-lps-6/'code'

, который можно рассматривать как три элемента

'code' https:///coral-lps-6/ 'code'

Возможно, вам следует использовать " " в innerHTML="..." или в BB-коде.

js = 'arguments[0].innerHTML = "{}"'.format(code)

Кстати: r"{}".format(bb_code) бесполезно. Это ничего не меняет в bb_code. И точно не добавляет " " к bb_code. Для добавления " " - r'"{}"'.format(bb_code)


EDIT: потребуется внешний *1034*, потому что BB-код находится во многих строках, поэтому в конце может потребоваться \строк, чтобы сообщить JavaScript, что это не конец строки.

bb_code = '''[B][FONT=Trebuchet MS][SIZE=7]Meteor[/SIZE][/FONT][/B]\
[COLOR=#000000][FONT=Verdana][I][B][SIZE=4]n: [/B][/I][/FONT]\
[S][B][FONT=Verdana]ki[/SIZE][/FONT][/B][/S][/COLOR]\
[URL='https:///coral-lps-6/']\
[FONT=Impact][SIZE=7][COLOR=#F41600][U]CLICK HERE TO BUY![/U][/COLOR][/SIZE][/FONT][/URL]'''

js = 'arguments[0].innerHTML = "{}"'.format(bb_code)

print(js)

self.browser.execute_script(js, messageBox)

РЕДАКТИРОВАТЬ: Этот код работает для меня. Он помещает BB-код в текстовую область для ответа на текущей странице.

import selenium.webdriver

driver = selenium.webdriver.Firefox()

driver.get('/13042897/zapolnite-tekstovoe-pole-kodom-bb-v-selenium-python')

messageBox = driver.find_element_by_id('wmd-input')

bb_code = '''[B][FONT=Trebuchet MS][SIZE=7]Meteor[/SIZE][/FONT][/B]\
[COLOR=#000000][FONT=Verdana][I][B][SIZE=4]n: [/B][/I][/FONT]\
[S][B][FONT=Verdana]ki[/SIZE][/FONT][/B][/S][/COLOR]\
[URL='https:///coral-lps-6/']\
[FONT=Impact][SIZE=7][COLOR=#F41600][U]CLICK HERE TO BUY![/U][/COLOR][/SIZE][/FONT][/URL]'''

js = 'arguments[0].innerHTML = "{}"'.format(bb_code)

#print(js)

driver.execute_script(js, messageBox)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...