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

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

解决方法:
思路: 使用findElements遍历,input标签,然后找到share按钮对应的 索引值,然后再操作。
Listelement=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 is not currently visible and so may not be interacted with的解决_第1张图片

被还原出来的input 如下:

Selenium-异常:Element is not currently visible and so may not be interacted with的解决_第2张图片

 

 

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


你可能感兴趣的:(selenium自动化测试)