簡體   English   中英

C#硒元素未附加

[英]C# Selenium element is not attached

我想從網站更改語言。 在下面,您可以看到html源代碼,c#硒代碼和錯誤。 該錯誤停止了我的程序,但奇怪的是語言已更改。 我希望你能幫幫我!

html源代碼

<select class="_fsoey">
   <option value="de">Deutsch</option>
   <option value="en">English</option>
   <option value="it">Italiano</option>
   <option value="nb">Norsk</option>
   <option value="nl">Nederlands</option>
   <option value="pl">Polski</option>
</select>

C#硒代碼

driver.FindElement(By.XPath("//select[@class='_fsoey']")).Click();
driver.FindElement(By.XPath("//option[contains(.,'English')]")).Click();

錯誤

舊元素參考:元素未附加到頁面文檔

您嘗試與之交互的元素位於<select>標記內。 因此,要從下拉列表中選擇一個選項 ,您需要創建一個選擇對象並調用方法SelectByValue()SelectByText() ,如下所示:

using OpenQA.Selenium.Support.UI;

// Identify the drop downdown element
var cities = driver.FindElement(By.XPath("//select[@class='_fsoey']"));
//create select element object 
var selectElement = new SelectElement(cities);

//select by value
selectElement.SelectByValue("en"); 
// select by text
selectElement.SelectByText("English");

如果您已經發送了堆棧跟蹤信息,那么我將能夠給出一個更明確的答案,但是仍然似乎不太可能從這兩行之一中拋出異常,我將在不久之后解釋原因。 我的猜測是該異常是由以后的操作引發的。

首先,您說確實選擇了該語言,這意味着實際執行了最后一次單擊。 但這不是唯一的原因。

這2行中的每行執行2次對WebDriver的調用:調用IWebDriver.FindElement,返回IWebElement,然后調用IWebElement。單擊從第一次調用返回的對象。 請注意,只能從IWebElement上的方法引發StaleElementReferenceException,這意味着IWebDriver.FindElement成功。 現在,StaleElementReferenceException意味着最初找到的元素后來被從頁面中刪除。 因為您在這兩個調用之間不執行任何操作,所以這種可能性很小。

發生這種情況的唯一情況是,該頁面執行了某種asyc操作,從而刪除了每行這兩個方法調用之間的元素。 但是話又說回來,在這種情況下,正確選擇語言是沒有意義的。

萬一我仍然錯了,我會給您一個提示,以幫助您進一步調查根本原因。 如果捕獲到異常並檢查IWebDriver.PageSource屬性,則可以查看DOM的狀態,並查看是否實際刪除了該元素(至少在Chrome中是這樣)。 如果您在調用FindElement之前也進行了檢查,則可以比較它們並查看是否發生了更改。 如果將PageSource屬性的值保存到.html文件,則可以在瀏覽器中打開文件,並在開發工具中檢查DOM。 這應該可以幫助您了解為什么會遇到此異常。

您可以使用Select方法,

Select dropdown = new Select(driver.findElement(By.xpath("//select[@class='_fsoey']")));
dropdown.selectByValue("en");  

您可以通過兩種方法選擇下拉列表的值: SelectByValueSelectByIndex

問題可能是在您執行查找元素城市的時間到您從下拉菜單中選擇的時間之間,頁面正在更改或刷新,這就是為什么您會獲得陳舊元素異常的原因。 從下拉列表中進行選擇之前,請嘗試查找元素。 如果不是這種情況,請提供更多詳細信息

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM