0

我有一个 div 块,您可以单击它们以手风琴风格显示内容。

我正在用 selenium 运行这个块以将它们全部打开,然后最终捕获屏幕截图。但是,我不确定如何最好地检查手风琴项目是否已显示,然后再继续下一个项目。

目前我的测试通过但最终的屏幕截图显示一些项目仍然关闭。我的代码:

detailsAccordion = self.ff.find_elements_by_class_name('accordion')
index = 1
for option in detailsAccordion:
    try:
        WebDriverWait(self.ff, 10).until(lambda driver : driver.find_element_by_xpath("//div[@class='accordionContainer']/div["+
            str(index) +"]/h3[1]")).click()
        # Need a WebDriverWait here for style='display: block;' on the current div
    except:
        print "Can't access div #" + unicode(index)
    index = index + 1

如果我添加一行;

WebDriverWait(self.ff, 10).until(lambda driver : driver.find_element("//div[@class='accordionContainer']/div["+
                str(index) +"][@style='display: block;']"))

我得到了我的异常打印,那么是否可以在每个 div 的显示属性上添加一个要求?

4

1 回答 1

1

您可以使用selenium API 提供的is_displayed()方法检查任何 WebElement 是否可见。

当您在网页上通过 xpath 查找元素时,selenium 驱动程序将自动等待页面加载,然后再将控制权交给您的代码。我没有看到需要使用 WebDriverWait。

如果元素不存在,代码将给出元素未找到异常,但如果存在,is_displayed() 将根据它是否可见返回 true 或 false。

在截屏之前,检查手风琴项是否可见,如果可见则截屏。

也许使用implicitWait 会帮助你 -

from selenium import webdriver

  ff = webdriver.Firefox()
  ff.implicitly_wait(10) # seconds
于 2012-07-18T09:08:30.233 回答