selenium三大等待:强制等待能解决的问题,使用显示和隐式不能解决吗

最近在学三大等待,练习的时候遇到一个奇怪的问题(练习代码在后面):
场景:
添加购物车的时候需要登录,登录的窗口是一个iframe,我切到iframe登录成功之后,登录窗口自动关闭了,然后再点击一次添加购物车

我的尝试:
1.不切句柄,直接使用显式等待,会出现uniqueContextId找不到的问题,我不理解这个ContextId是哪里的Id

img

2.切换句柄,使用显式等待,出现ElementClickInterceptedException,似乎切换后反而找不到原理窗口元素了?

img

3.不切换句柄,在显式等待前面加上强制等待,一切正常

我的理解:
1.切换到iframe之后,即使登录窗口自动关闭了,我也应该再切回默认窗体
2.再次添加购物车的时候,如果是找不到元素,显式等待应该是抛超时异常呀?而且不理解为什么10秒的显式和隐式都没能运行成功,加上强制就能运行成功?

有人能帮忙解惑吗?感激不尽!

from time import sleep

from selenium import webdriver
from selenium.webdriver.support.wait import WebDriverWait

options = webdriver.ChromeOptions()
options.add_argument('start-maximized')
options.page_load_strategy = 'eager'
driver = webdriver.Chrome(options=options)
driver.implicitly_wait(10)

driver.get('http://39.98.138.157/shopxo/index.php')
WebDriverWait(driver, 5, 1).until(lambda el: driver.find_element('name', 'wd'),
                                  message="搜索框加载失败").send_keys('手机')
driver.find_element('id', 'ai-topsearch').click()
WebDriverWait(driver, 5, 1).until(lambda el: driver.find_element('xpath', '//p[contains(text(),"小米")]'),
                                  message='搜索超时').click()
handles = driver.window_handles
driver.switch_to.window(handles[1])

# driver.find_element('id','add').click()
# driver.find_element('id','text_box').send_keys('5')
driver.find_element('xpath', '//button[@title="加入购物车"]').click()

driver.switch_to.frame(driver.find_element('xpath', '//*[@id="common-popup-modal-login"]/div/iframe'))
driver.find_element('name', 'accounts').send_keys('sherry')
driver.find_element('name', 'pwd').send_keys('123456')
driver.find_element('xpath', '//button[text()="登录"]').click()
# sleep(5)
# driver.switch_to.default_content()
WebDriverWait(driver, 10, 1).until(lambda el: driver.find_element('xpath', '//button[@title="加入购物车"]'),
                                   message="点击失败").click()

如果你研究过网站的话~应该知道很多时候数据或者显示的内容组件都是动态加载出来的。这里其实不涉及显不显式的问题,核心是该动态内容没有加载出来的。selenium 自身的函数行为等待时间不够导致组件没有出现就去尝试获取从而出现异常是正常的。