Selenium-异常:Element is not currently visible and so may not be interacted with的解决

来源:互联网 发布:天河工商局软件地址 编辑:程序博客网 时间:2024/05/18 00:57

Selenium-异常:Element is not currently visible and so may not be interacted with的解决

解决方法:
思路: 使用findElements遍历,input标签,然后找到share按钮对应的 索引值,然后再操作。
List<WebElement>element=driver.findElements(By.tagName("input"));
for(WebElement e:element)
{
System.out.println(e.getAttribute("id"));
}
element.get(78).click();
至此 问题解决。

问题更正: 此种问题的关键是在于用className和id都不唯一所以找不到对象,改为:
driver.findElement(By.xpath("//input[@value='Share']")).click();同样可以解决问题。


二、

我们需要本地上传文件时,一般找个那个input元素,然后send_keys把本地的文件路径传进去就好了。像这样:

driver.find_element_by_name("files").send_keys("D:\\manual.pdf")

但是最近遇到一个问题,上传的时候报错啦。报错信息如下:

selenium.common.exceptions.ElementNotVisibleException: Message: u'Element is not currently visible and so may not be interacted with' ; Stacktrace: 

它这说的visiblecss里元素的visibility属性好像还不是一个东西,就算用js改变这个元素的CSS属性为可见的还是会报上面这个错误。后来看到webElement类里有个方法叫is_displayed()解释是"Whether the element would be visible to a user" 所以这里说的可不可见是对用户来说的,之所以会报不可见的错是因为本地上传里的input是经过美化的,已经看不到了,所以需要用js改变这个元素的样式把本来面目显示出来~~~ 这就需要自己调样式了。Js里有个attr方式可以用来改变元素的样式,示例如下:

driver.execute_script("$('.fileinput-button input').eq(0).attr('style','height:20px;opacity:1;display:block;position:static;transform:translate(0px, 0px) scale(1)')")

改了样式后,找到该元素调用了一下is_displayed(),返回值是true了,再运行脚本就不会报错,文件顺利上传上去了~~

原来的上传按钮:   selenium遇到异常:Element <wbr>is <wbr>not <wbr>currently <wbr>visible <wbr>and <wbr>so <wbr>may

被还原出来的input 如下:

selenium遇到异常:Element <wbr>is <wbr>not <wbr>currently <wbr>visible <wbr>and <wbr>so <wbr>may

 

 

总结:遇到被美化的元素,导致出现元素不可见的异常时,就用JS把它的样式还原回去~

阅读全文
1 0
原创粉丝点击