可见截图:
html
定位出现“Webdriver Element is not currently visible”的报错。 根据其余人的经验,须要查找元素是否中是否有隐藏属性。 发现上面代码中存在display: block;
,故须要用js来模拟点击行为。java
解决方案:web
###1.可先查看该元素是否存在:框架
yes = driver.find_element_by_id("notice-confirm").is_displayed() print yes
返回true,说明能够元素存在。dom
若是返回false,有几种可能:.net
(1)定位不许确。换个定位方式
(2)这个元素须要hover或者悬停才会显示出来。code
#定位到要悬停的元素 above =driver.find_element_by_id("xx") #对定位到的元素执行悬停操做 ActionChains(driver).move_to_element(above).perform()
###2.使用js去点击按钮orm
js = "document.getElementsByTagName('button')[0].click()"; driver.execute_script(js)
详细解释以下:htm
js = "document.getElementsByTagName('button')[0].click()";
表示定位该元素,并点击。
可在Firefox的控制台中的对应页面执行上面的js,查看是否认位成功和点击效果。
有其余的定位方式可见,可见连接HTML DOM Document 对象对象
driver.execute_script(js)
表示调用这个js片断。
调用js方法使用**execute_script(script, *args)** 在当前窗口/框架 同步执行javaScript 脚本:JavaScript的执行。 *参数:适用任何JavaScript脚本。 使用: driver.execute_script(‘document.title’)
###3.经过javaScript修改display的值
js = 'document.querySelectorAll("select")[0].style.display="block";' driver.execute_script(js) sel = driver.find_element_by_tag_name('select') Select(sel).select_by_value('opel')
document.querySelectorAll("select")[0].style.display="block": document.querySelectorAll("select") 选择全部的select。 [0] 指定这一组标签里的第几个。 style.display="block"; 修改样式的display="block" ,表示可见。
执行完这句js代码后,就能够正常操做下拉框了。
其余人的解决方法:
关于元素定位的问题
Webdriver Element is not currently visible 解决方法
How to force Selenium WebDriver to click on element which is not currently visible?
有什么更好的定位方法,欢迎大神赐教
PS: js的操做一个元素的前提也是先定位它。 能够让它变成: display:block 或 display:line。再去定位操做
'var div = document.getElementsByName("select2"); div.attributes.removeNamedItem("style");' driver.execute_script(js)