希望有人能在這個問題上幫助...硒C# - OpenQA.Selenium.StaleElementReferenceException:陳舊的元素參考:元素沒有連接到網頁文件
我不斷收到上述錯誤消息(見標題)時與級聯下拉菜單進行交互。 我已經成功地採用的只有基本的解決方法是「Thread.sleep代碼」看看下面的代碼提取物:
注我傳遞下列參數:
屬性:ID
attrval:例如ID123456(下拉的ID)
參數:汽車(下拉值,我們想選擇)
IWebElement element = findMyElement(attribute, attrval);
SelectElement selectElement = new SelectElement(element);
selectElement.SelectByText(parameter);
// dirty code - needs to be re-written
Thread.Sleep(500);
if (new SelectElement(findMyElement(attribute, attrval)).SelectedOption.Text.Equals(parameter))
{
return "pass";
}
注2:findMyElement是一個自定義的方法(這裏是摘錄):
public static IWebElement findMyElement(string attribute, string attrval)
{
WebDriverWait wait = new WebDriverWait(driver, TimeSpan.FromSeconds(30));
switch (attribute.ToLower())
{
case "id":
wait.Until(ExpectedConditions.ElementExists(By.Id(attrval)));
wait.Until(ExpectedConditions.ElementIsVisible(By.Id(attrval)));
return driver.FindElement(By.Id(attrval));
正如我在我的代碼已經指出的意見是有反正我能避免使用的Thread.Sleep我所知,這是不是一個推薦的方法。
感謝提前:)
什麼行引發異常?選擇下拉菜單時,您的應用程序中會發生什麼?頁面是否改變了?任何新元素添加?任何新請求已發送? – Arran 2014-12-09 12:09:15
此處引發異常(不帶thread.sleep)if(new SelectElement(findMyElement(attribute,attrval))。SelectedOption.Text.Equals(parameter)) – David 2014-12-09 12:14:41
關於頁面本身,因爲它是一個級聯下拉列表中的可選選項下拉菜單會更新,例如如果我在第一個下拉列表中選擇汽車,第二個將詢問顏色。在後臺注意,當第一個下拉列表中的值已被選中時,頁面會回發 – David 2014-12-09 12:34:17