2014-09-02 107 views
1

看一看下面的代码:硒可见元素不会被识别为可见

elem = driver.find_element_by_id(":8") 
elem.click() 
time.sleep(1) 

elem = driver.find_element_by_id("country_residence") 
print "elem visible ? = " + str(elem.value_of_css_property('visibility')) 
Select(elem).select_by_value("DE") 

打印指出,该元素是可见这一刻:

elem visible ? = visible 

不过,我得到以下错误信息:

selenium.common.exceptions.ElementNotVisibleException: Message: u'Element is not currently visible and so may not be interacted with' ; Stacktrace: 
    at fxdriver.preconditions.visible (file:///var/folders/0s/j6874rlj63qccjx38ltmwy880000gn/T/tmppJ09Vu/extensions/[email protected]/components/command_processor.js:8791:5) 
at DelayedCommand.prototype.checkPreconditions_ (file:///var/folders/0s/j6874rlj63qccjx38ltmwy880000gn/T/tmppJ09Vu/extensions/[email protected]/components/command_processor.js:11438:1) 
at DelayedCommand.prototype.executeInternal_/h (file:///var/folders/0s/j6874rlj63qccjx38ltmwy880000gn/T/tmppJ09Vu/extensions/[email protected]/components/command_processor.js:11455:11) 
at DelayedCommand.prototype.executeInternal_ (file:///var/folders/0s/j6874rlj63qccjx38ltmwy880000gn/T/tmppJ09Vu/extensions/[email protected]/components/command_processor.js:11460:7) 
at DelayedCommand.prototype.execute/< (file:///var/folders/0s/j6874rlj63qccjx38ltmwy880000gn/T/tmppJ09Vu/extensions/[email protected]/components/command_processor.js:11402:5) 

这怎么可能?

+1

行为是否一致?增加'time.sleep()'间隔是否有助于或改变行为?你能分享到网站的链接,以便我们也可以重现它吗?谢谢。 – alecxe 2014-09-02 12:24:01

+0

附上html样本,请见。谢谢。 – 2014-09-02 13:52:40

回答

1

Selenium检查元素是否可见的方法是使用is_displayed()方法。鉴于你所描述的东西,如果你这样做:

elem = driver.find_element_by_id("country_residence") 
print elem.is_displayed() 

你应该得到False结果。一个元素可能被隐藏有多种原因。该CSS属性是visibility其中之一。还有display属性。然后考虑元素的父母和祖父母的可见性会影响它是否可见。它可能在屏幕外等。

检查元素的visibility隔离的CSS属性绝对不是检查它是否可以与之交互的方式。

0

Selenium了解该元素不仅可见/不可见,而且可见性属性不可见。因为它是硒的“is_visible”方法写入:

知名度‘ 属性设置为‘隐藏’或‘显示’属性“决定了当指定元素可见的 元素可以通过设置CSS渲染无形’到“无”,无论是对于 元素本身,还是一个如果它的祖先。如果 该元素不存在,这种方法将失败。

因此,回答你的问题“这可能怎么样?” - 它(元素或它的祖先)可以没有属性“可见性”,但可以具有“显示:无”属性