Mon*_*eal 2 python selenium selenium-webdriver
在我的测试运行期间,有一堆 js 脚本创建了我稍后必须访问的全局常量。目前代码库的构建方式是我无法避免的。基本上发生了接下来的事情:打开一个页面,在一个调用中执行一个脚本,在另一个调用中执行另一个脚本。
from selenium import webdriver
with webdriver.Firefox() as driver:
driver.get("http://127.0.0.1:8000")
driver.execute_script("const x = 1;")
driver.execute_script("console.log(x + 1);")
Run Code Online (Sandbox Code Playgroud)
一切都因这个错误而崩溃。
Traceback (most recent call last):
File "test_hello_selenium.py", line 24, in <module>
driver.execute_script("console.log(x += 1);")
File "~/python3.6/site-packages/selenium/webdriver/remote/webdriver.py", line 636, in execute_script
'args': converted_args})['value']
File "~/python3.6/site-packages/selenium/webdriver/remote/webdriver.py", line 321, in execute
self.error_handler.check_response(response)
File "~/python3.6/site-packages/selenium/webdriver/remote/errorhandler.py", line 242, in check_response
raise exception_class(message, screen, stacktrace)
selenium.common.exceptions.JavascriptException: Message: ReferenceError: x is not defined
Run Code Online (Sandbox Code Playgroud)
其实,司机并不重要。使用 chromedriver 错误保持不变。
实际问题是如何在不将两个 js 脚本合并为一个的情况下获得正确的结果,或者理解为什么这是不可能的。
每次致电execute_script在匿名函数的上下文中调用指定的 JavaScript。这是设计使然,以免污染正在自动化的页面的 DOM。这意味着在调用中创建的任何变量的作用域都是该调用的持续时间。要访问该范围之外的变量,您\xe2\x80\x99d 需要将其显式存储在页面 DOM 中,如下所示:
# Note: could also use window instead\n# of document \ndriver.execute_script("document.x = 1;")\ndriver.execute_script("console.log(document.x + 1);")\nRun Code Online (Sandbox Code Playgroud)\n
| 归档时间: |
|
| 查看次数: |
540 次 |
| 最近记录: |