我想测试juptyerlab的补丁实现。我希望使用selenium在代码单元中执行"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
包含以下内容(它嵌套在我省略的其他内容中):
我可以看到print("text")
的文本在哪里(即,上面html片段中最深的嵌套元素),但我无法确定在这里可以向哪个元素发送文本或向哪个元素发送键。在
我遇到了robotframework-jupyterlibrary,它有一些线索,比如this和{a3}。从那些环节我看到了
${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
在这种奇怪的语言中做了什么,以及如何在selenium中实现它。在
有什么想法吗?在
我也尝试过(基于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: Message: TypeError: rect is undefined
打开Jupyter笔记本:
打开一个命令窗口并导航到存储库文件夹,或者打开
anaconda-command-prompt
窗口并简单地执行jupyter notebook NotebookApp.token='' NotebookApp.password=''
使用
driver.get("http://localhost:8888")
加载笔记本后,最棘手的部分是如何选择Dynamically changing object
。访问参考号:Dynamically Changing IDs。在这两种方法都会给您相同的选择点,但最好使用Xpath,这是一种更方便的技术。你可以这样向前走
以下代码在Chrome、Firefox和jupyterlab的最新版本中进行了测试:
相关问题 更多 >
编程相关推荐