1. 程式人生 > >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的解決

2014年07月09日 11:37:15 leolu007 閱讀數:5629更多
個人分類: selenium自動化測試
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:

它這說的visible和css裡元素的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

被還原出來的input 如下:

selenium遇到異常:Element is not currently visible and so may

總結:遇到被美化的元素,導致出現元素不可見的異常時,就用JS把它的樣式還原回去~