javascript - 如何使用 Selenium 和 Javascript 修复无法读取 null 错误的属性“点击”
问题描述
我正在使用 Selenium Python 创建一个机器人。我正在尝试单击不可见的元素(仅在单击按钮以展开树后可见),因此我正在使用 JavaScript 执行如下脚本:
entity_ID = '1200'
js = """document.querySelector("div[data-id='{0}']").click()""".format(entity_ID)
driver.execute_script(js)
这返回JavascriptException: Message: javascript error: Cannot read property 'click' of null
。如果我展开树以使元素可见,则上述代码运行成功。如果我折叠树以使元素不再可见......上面的代码运行成功。为什么这仅在元素可见或过去可见时才有效?
元素(在树内)如下所示:
<div class="rowContainer js-tree-row AssessmentTreeGrid unselectable ui-selected treegridinlineedit" data-id="1200" data-type="15005" data-bid="0" data-role="1" data-key="false" data-testresult="0" data-strategic="false" data-released="false" data-mtallowedactions="12600,11800,8700,12000,8100,32200,32400,5400,26300,26400,32600,32500,32100,19500" data-mtunallowedactions="" data-mtunallowedactionreasons="" data-uiallowedactions="500,600" data-allowedreorder="false" data-collapsible="true" tabindex="0" unselectable="on">
完整的回溯如下所示:
JavascriptException Traceback (most recent call last)
<ipython-input-332-7945dcef4da6> in <module>
----> 1 driver.execute_script(js)
~\AppData\Local\conda\conda\envs\robotics\lib\site-packages\selenium\webdriver\remote\webdriver.py in execute_script(self, script, *args)
634 return self.execute(command, {
635 'script': script,
--> 636 'args': converted_args})['value']
637
638 def execute_async_script(self, script, *args):
~\AppData\Local\conda\conda\envs\robotics\lib\site-packages\selenium\webdriver\remote\webdriver.py in execute(self, driver_command, params)
319 response = self.command_executor.execute(driver_command, params)
320 if response:
--> 321 self.error_handler.check_response(response)
322 response['value'] = self._unwrap_value(
323 response.get('value', None))
~\AppData\Local\conda\conda\envs\robotics\lib\site-packages\selenium\webdriver\remote\errorhandler.py in check_response(self, response)
240 alert_text = value['alert'].get('text')
241 raise exception_class(message, screen, stacktrace, alert_text)
--> 242 raise exception_class(message, screen, stacktrace)
243
244 def _value_or_default(self, obj, key, default):
JavascriptException: Message: javascript error: Cannot read property 'click' of null
(Session info: chrome=78.0.3904.97)
解决方案
尝试运行测试直到点击,在浏览器的控制台中运行:
document.querySelector("div[data-id='<ID>']")
如果您看到“空”,则:
- 对象不存在;
- 您应该等待显示对象。
推荐阅读
- reactjs - 使用 React.useEffect() 触摸以前的道具
- php - 如何在 php shell_exec 中运行多个 ffmpeg 任务
- javascript - 如何在不加载页面且不使用 Cookie 的情况下将 javaScript 变量分配给 PHP 变量
- java - 使用并发锁锁定数组的特定索引 - RentrantLock
- ios - 如何为 CloudKit 通知检索所需的密钥?
- python - 我有一个 txt 文件,想打印特定的单词
- javascript - Javascript Regex:如果尚未替换,则用 URL 替换字符串
- c# - Blazor - 组件包装和数据绑定
- android - 如何在android studio中集成google meet
- python - Tkinter:无论是否选中,复选框值始终为 0