设置新超时后,为何硒Webdriver实例变量“超时” {implict,pageload,脚本}未更新?

时间:2020-06-12 11:19:09

标签: python-3.x selenium-webdriver

在以下脚本中,Selenium不会使用新的设置超时来更新实例变量。 有人可以解释这背后的原因吗?

import pprint
from selenium import webdriver

url = "https://www.facebook.com"
driver = webdriver.Firefox()
pprint.pp(driver.__dict__['capabilities']['timeouts'])

driver.implicitly_wait(10)
pprint.pp(driver.__dict__['capabilities']['timeouts'])

driver.set_script_timeout(10)
pprint.pp(driver.__dict__['capabilities']['timeouts'])

driver.set_page_load_timeout(200)
pprint.pp(driver.__dict__['capabilities']['timeouts'])

driver.close()

输出:

{'implicit': 0, 'pageLoad': 300000, 'script': 30000} 
{'implicit': 0, 'pageLoad': 300000, 'script': 30000}
{'implicit': 0, 'pageLoad': 300000, 'script': 30000} 
{'implicit': 0, 'pageLoad': 300000, 'script': 30000}

1 个答案:

答案 0 :(得分:0)

这是因为在capabilities映射中从会话创建返回的字典是初始条件的快照。它实质上是会话开始时的值的记录。 capabilities映射的值 not 不是实时更新的对象,如果会话中的内容发生更改,该对象将更改。要获取新的超时值,您需要调用WebDriver命令以获取当前设置的超时。在Selenium的Python语言绑定中,以下内容应为您提供您所期望的东西:

# WARNING: Code written from memory without execution
# It may require modification to run without error
import pprint
from selenium import webdriver

url = "https://www.facebook.com"
driver = webdriver.Firefox()
pprint.pp(driver.__dict__['capabilities']['timeouts'])

driver.implicitly_wait(10)

driver.set_script_timeout(10)

driver.set_page_load_timeout(200)

timeouts = driver.timeouts
pprint.pp(timeouts)

driver.close()