2015-08-21 70 views
0

我試圖訪問一個單選按鈕。從我的研究中,我發現使用名稱的元素,因爲單選按鈕的元素具有相同的名稱。我想選擇第二個按鈕,但是我得到一個元素不可見的異常,並且返回的元素的位置屬性在窗口之外。但是,我可以看到頁面上的元素。Selenium C#'OpenQA.Selenium.ElementNotVisibleException'error

異常:類型OpenQA.Selenium.ElementNotVisibleException「的異常出現在WebDriver.dll但在用戶代碼中沒有處理

ReadOnlyCollection<IWebElement> webElements = webElement.FindElements(By.Name("thename")); 
webElements[1].SendKeys(Keys.Return); 

我嘗試使用JavaScript的執行移動到的位置,以及Actions方法。都沒有工作。

我嘗試了所有可能的密鑰發送給點擊的操作方法:

Actions actions = new Actions(webDriver); 
actions.MoveToElement(webElements[1]); 
actions.SendKeys(Keys.Return); 
actions.SendKeys(Keys.Enter); 
actions.SendKeys(Keys.ArrowDown); 
actions.Click(); 
actions.Perform(); 

對於JavaScript的執行我嘗試兩種方法。滾動到視圖中,並滾動webElement [1]的Location屬性告訴我它已關閉。

IJavaScriptExecutor js = webDriver as IJavaScriptExecutor; 
string title = (string)js.ExecuteScript("arguments[0].scrollIntoView(true);", webElements[1]); 
string title1 = (string)js.ExecuteScript("javascript:window.scrollBy(557329,136);"); 

我仍然不斷看到位置不可見的異常。

+0

也許我誤解了一些東西,但你正在尋找一個單選按鈕......你爲什麼要發送ENTER鍵而不是做'.Click()'?你確定你在頁面上看到的單選按鈕實際上是那個名字的第二個元素嗎?可能有一些隱藏的元素具有相同的名稱。嘗試'webElements [1] .GetAttribute(「outerHTML」);'看看是否返回您正在尋找的標籤的HTML。 – JeffC

+0

我寧願仔細研究'html'。我以前的單選按鈕實際上並不是傳統單選按鈕。你可以在這裏分享這裏的html,如果可能的話 – Saifur

回答

0

您可以做的快速檢查是在瀏覽器和控制檯中打開開發人員工具,看document.querySelector(「[name ='thename']」)是否找到該元素。如果沒有,可能是該元素在iframe中,或者您使用的名稱可能有拼寫錯誤。您還需要確保您嘗試訪問的單選按鈕位於DOM樹中的「webElement」下方。當您檢查元素時,頁面仍然可能正在加載。爲了檢查它是否需要等待,然後嘗試查找元素,以便頁面可以完全加載。

+0

你真的想要'document.querySelectorAll(「[name ='thename']」)[1]'因爲你想要第二個元素。 – JeffC