Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/339.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 通过不同的execute_脚本调用创建和访问js变量_Python_Selenium_Selenium Webdriver - Fatal编程技术网

Python 通过不同的execute_脚本调用创建和访问js变量

Python 通过不同的execute_脚本调用创建和访问js变量,python,selenium,selenium-webdriver,Python,Selenium,Selenium Webdriver,在我的测试运行期间,有一堆js脚本,它们创建了我以后必须访问的全局常量。代码库目前是以我无法避免的方式构建的。接下来的事情基本上会发生:打开一个页面,在一个调用中执行一个脚本,在另一个调用中执行另一个脚本 从selenium导入webdriver 使用webdriver.Firefox()作为驱动程序: 驱动程序。获取(“http://127.0.0.1:8000") driver.execute_脚本(“const x=1;”) driver.execute_脚本(“console.log(x

在我的测试运行期间,有一堆js脚本,它们创建了我以后必须访问的全局常量。代码库目前是以我无法避免的方式构建的。接下来的事情基本上会发生:打开一个页面,在一个调用中执行一个脚本,在另一个调用中执行另一个脚本

从selenium导入webdriver
使用webdriver.Firefox()作为驱动程序:
驱动程序。获取(“http://127.0.0.1:8000")
driver.execute_脚本(“const x=1;”)
driver.execute_脚本(“console.log(x+1);”)
由于这个错误,一切都崩溃了

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
回溯(最近一次呼叫最后一次):
文件“test\u hello\u selenium.py”,第24行,在
driver.execute_脚本(“console.log(x+=1);”)
文件“~/python3.6/site packages/selenium/webdriver/remote/webdriver.py”,第636行,在执行脚本中
'args':已转换的_args})['value']
文件“~/python3.6/site packages/selenium/webdriver/remote/webdriver.py”,第321行,执行
self.error\u handler.check\u响应(响应)
文件“~/python3.6/site packages/selenium/webdriver/remote/errorhandler.py”,第242行,在check\u响应中
引发异常类(消息、屏幕、堆栈跟踪)
selenium.common.exceptions.JavascriptException:Message:ReferenceError:x未定义
事实上,司机并不重要。使用chromedriver时,错误保持不变


实际的问题是如何在不将两个js脚本合并为一个脚本或理解为什么不可能的情况下获得正确的结果。

每次调用
execute\u script
都会在匿名函数的上下文中调用指定的JavaScript。这是为了避免污染被自动化页面的DOM而设计的。这意味着在调用中创建的任何变量的作用域都是该调用的持续时间。要访问该范围之外的变量,需要将其显式存储在页面DOM中,如下所示:

# Note: could also use window instead
# of document 
driver.execute_script("document.x = 1;")
driver.execute_script("console.log(document.x + 1);")

每次调用
execute\u script
都会在匿名函数的上下文中调用指定的JavaScript。这是为了避免污染被自动化页面的DOM而设计的。这意味着在调用中创建的任何变量的作用域都是该调用的持续时间。要访问该范围之外的变量,需要将其显式存储在页面DOM中,如下所示:

# Note: could also use window instead
# of document 
driver.execute_script("document.x = 1;")
driver.execute_script("console.log(document.x + 1);")

但是它在python-selenium2.x上运行良好。这是一个bug吗?它可能是W3C WebDriver规范正在标准化的驱动程序行为的产物。如果它曾经工作过,但现在不再工作了,那么当前的行为是正确的,但是它在python-selenium2.x上工作正常。这是一个bug吗?它可能是W3C WebDriver规范正在标准化的驱动程序行为的产物。如果它曾经工作过,但不再工作,则当前行为是正确的。