我正在为一些QA自动化任务学习python和selenium。我正在研究我的框架的导航部分,我有一个非常不一致的测试。如果没有对测试或站点进行更改,它有时会通过,有时会失败。看起来它无法执行Hover操作,然后在无法找到子菜单链接时抛出异常。
转到功能:
def goto(driver, section, subsection):
if subsection != "None":
hover_over = driver.find_element_by_link_text(section)
hover = selenium.webdriver.ActionChains(driver).move_to_element(hover_over)
hover.perform()
driver.find_element_by_link_text(subsection).click()
else:
driver.find_element_by_link_text(section).click()
基本上,section变量是第一个需要悬停以打开子菜单的菜单项。 subsection变量是要单击的子菜单链接的文本。
我能想到的唯一原因是因为它太脆弱了,现场响应时间很短,但是Selenium是否等待之前的行动完成才能进入下一个行动?
答案 0 :(得分:1)
是的,这听起来像是一个时间问题。
在点击子菜单之前添加explicit wait,让它更可靠:
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
def goto(driver, section, subsection):
if subsection != "None":
hover_over = driver.find_element_by_link_text(section)
hover = selenium.webdriver.ActionChains(driver).move_to_element(hover_over)
hover.perform()
# IMPROVEMENT HERE
WebDriverWait(driver, 10).until(EC.element_to_be_clickable((By.LINK_TEXT, subsection))).click()
else:
driver.find_element_by_link_text(section).click()