使用Python

时间:2016-02-11 23:17:47

标签: python selenium webdriver

我正在为一些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是否等待之前的行动完成才能进入下一个行动?

1 个答案:

答案 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()