Я хотел бы протестировать исправленную реализацию juptyerlab. Я надеялся использовать селен для выполнения "hello world"
в ячейке кода. Пока я могу войти и создать новую записную книжку:
from selenium import webdriver
driver = webdriver.Firefox()
# assume jupyterlab is running and serving on localhost at port 8888
driver.get("http://localhost:8888")
elem = driver.find_element_by_id("password_input")
password = ""
elem.send_keys(password)
elem = driver.find_element_by_id("login_submit")
elem.click()
elem = driver.find_element_by_css_selector(".jp-Launcher-cwd+ .jp-Launcher-section .jp-LauncherCard")
elem.click()
Это создает новую записную книжку, но теперь я застрял в точке ввода некоторого кода в ячейку и его запуска. Если я просматриваю исходный код страницы, я не вижу html-элементов для ячеек. Но если я введу print("test")
в ячейку, то driver.page_source
содержит это (оно довольно вложено в другие вещи, которые я тоже пропустил):
<code> <div class="CodeMirror cm-s-jupyter CodeMirror-wrap jp-mod-readOnly">
<div style="overflow: hidden; position: relative; width: 3px; height: 0px; top: 0px; left: 0px;">
<textarea
style="position: absolute; bottom: -1em; padding: 0px; width: 1px; height: 1em; outline: currentcolor none medium;"
autocorrect="off" autocapitalize="off"
spellcheck="false" tabindex="0"
wrap="off"></textarea></div>
<div class="CodeMirror-vscrollbar" tabindex="-1"
cm-not-content="true"
style="display: block; bottom: 0px;">
<div style="min-width: 1px; height: 33px;"></div>
</div>
<div class="CodeMirror-hscrollbar" tabindex="-1"
cm-not-content="true">
<div style="height: 100%; min-height: 1px; width: 0px;"></div>
</div>
<div class="CodeMirror-scrollbar-filler"
cm-not-content="true"></div>
<div class="CodeMirror-gutter-filler"
cm-not-content="true"></div>
<div class="CodeMirror-scroll" tabindex="-1" draggable="true">
<div class="CodeMirror-sizer"
style="margin-left: 0px; padding-right: 0px; padding-bottom: 0px;">
<div style="position: relative;">
<div class="CodeMirror-lines" role="presentation">
<div style="position: relative; outline: currentcolor none medium;"
role="presentation">
<div class="CodeMirror-measure">
<pre><span>xxxxxxxxxx</span>
print("test")
Я вижу, где находится текст для print("text")
(т.е. самые глубокие вложенные элементы в приведенном выше фрагменте HTML), но я не могу понять, какойэлемент здесь я мог бы отправлять текст или отправлять ключи.
Я наткнулся на robotframework-jupyterlibrary , и в нем есть некоторые подсказки, такие как this и это . Из этих ссылок я вижу
${JLAB CSS ACTIVE INPUT} ${JLAB CSS ACTIVE CELL} .CodeMirror
и
Add and Run JupyterLab Code Cell
[Arguments] ${code}=print("hello world")
[Documentation] Add a ``code`` cell to the currently active notebook and run it.
Click Element css:${JLAB CSS NB TOOLBAR} ${JLAB CSS ICON ADD}
Sleep 0.1s
${cell} = Get WebElement css:${JLAB CSS ACTIVE INPUT}
Click Element ${cell}
Set CodeMirror Value ${JLAB CSS ACTIVE INPUT} ${code}
Run Current JupyterLab Code Cell
Click Element ${cell}
, что заставляет меня задуматься, если я выберу элемент .CodeMirror
, тогда мне просто нужно выяснить, что Get WebElement
делает вэтот странный язык и как это сделать в селене.
Есть идеи?
Я тоже пробовал (основываясь на https://stackoverflow.com/a/48723135/1011724 и https://stackoverflow.com/a/50279295/1011724):
from selenium.webdriver.common.action_chains import ActionChains
actions = action_chains.ActionChains(driver)
textarea = driver.find_elements_by_css_selector('.CodeMirror textarea')[0] # tried for [0], [1] ,[2] and [3] which is all of them.
actions.move_to_element(textarea).click().send_keys("testing...").perform()
, но я продолжаю получатьошибка
selenium.common.exceptions.WebDriverException: Сообщение: TypeError: rect не определено