0
我有一块div,你可以点击显示手风琴风格的内容。可以在XPath定位器上使用CSS属性以确保元素可见吗?
我正在通过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的显示属性上添加一个要求吗?
我试过以下,但它不会等待每个项目打开。有些失败,但有一个时间睡眠(1),他们都工作。 'WebDriverWait(self.ff,10).until(lambda driver:driver.find_element_by_xpath(“// div [@ class ='accordionContainer']/div [”+ str(index)+“]/div [@ class =' accordionContent']“)。is_displayed())' – 2012-07-18 10:07:55
一个隐含的等待会起作用,但这与我试图避免的睡眠有效地相同。我宁愿webdriver可以看到div的CSS属性已经设置为显示:块来提高脚本的速度。 – 2012-07-19 09:16:17
10秒的隐含等待并不意味着驱动程序将每次等待10秒来加载页面。这意味着如果司机没有找到你正在寻找的元素,那么它将等待10秒。因此,您不会因使用隐式等待而失去时间。 – 2012-07-19 16:56:46