查看以下代码:
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/fxdriver@googlecode.com/components/command_processor.js:8791:5)
at DelayedCommand.prototype.checkPreconditions_ (file:///var/folders/0s/j6874rlj63qccjx38ltmwy880000gn/T/tmppJ09Vu/extensions/fxdriver@googlecode.com/components/command_processor.js:11438:1)
at DelayedCommand.prototype.executeInternal_/h (file:///var/folders/0s/j6874rlj63qccjx38ltmwy880000gn/T/tmppJ09Vu/extensions/fxdriver@googlecode.com/components/command_processor.js:11455:11)
at DelayedCommand.prototype.executeInternal_ (file:///var/folders/0s/j6874rlj63qccjx38ltmwy880000gn/T/tmppJ09Vu/extensions/fxdriver@googlecode.com/components/command_processor.js:11460:7)
at DelayedCommand.prototype.execute/< (file:///var/folders/0s/j6874rlj63qccjx38ltmwy880000gn/T/tmppJ09Vu/extensions/fxdriver@googlecode.com/components/command_processor.js:11402:5)
这怎么可能?
答案 0 :(得分:1)
检查元素是否可见的Selenium方法是使用is_displayed()
方法。鉴于您所描述的内容,如果您这样做:
elem = driver.find_element_by_id("country_residence")
print elem.is_displayed()
你应该得到False
。元素可能不可见的原因有很多。 visibility
CSS属性就是其中之一。还有display
属性。然后考虑元素的父母和祖父母的可见性可以影响它是否可见。它可能是屏幕外等等。
单独检查元素的visibility
CSS属性绝对不是检查它是否可以与之交互的方法。
答案 1 :(得分:0)
Selenium明白,元素是可见的/不可见的,而不仅仅是“可见性”。属性。正如它为硒的写作&#34; is_visible&#34;方法:
&#34;确定指定的元素是否可见。一个 通过设置CSS&#34; visibility&#34;可以使元素不可见。 财产到&#34;隐藏&#34;,或&#34;显示&#34;财产到&#34;无&#34;,或者为 元素本身或一个如果它的祖先。如果,此方法将失败 元素不存在。&#34;
所以,回答你的问题&#34;这怎么可能?&#34; - 它(元素或它的祖先)可以没有属性&#39;可见性,但可以显示:无&#39;属性