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按钮对应的 索引值,然后再操作。
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 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把它的样式还原回去~


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值