c# selenium 通过导航 StaleElementReferenceException 控制台应用程序验证所有链接
c# selenium verify all links with navigating through them StaleElementReferenceException console application
当我尝试查找所有链接并在我的控制台应用程序中浏览它们时,我不断收到 StaleElementReferenceException 错误,我有以下代码并且昨天一整天都在尝试修复它但没有结果:
{
static void Main(string[] args)
{
try
{
Console.WriteLine("Starting the browser...");
IWebDriver driver = new FirefoxDriver();
driver.Navigate().GoToUrl("http://www.site.ro");
System.Threading.Thread.Sleep(2000);
Console.WriteLine("Gathering the Links...");
List<IWebElement> links = new List<IWebElement>();
try
{
foreach (IWebElement item in driver.FindElements(By.TagName("a")))
{
try
{
if (item.Displayed == true)
{
item.Click();
Console.WriteLine("Item is displayed \a\n" + "Navigating to link...");
} else
{
continue;
}
Random r1 = new Random();
Random r2 = new Random();
Random r3 = new Random();
var last = r3.Next(1, 10) * 700;
var mseconds = r2.Next(1, 10) * 500;
var time = mseconds + r1.Next(1, 10) * 300;
Console.WriteLine("Waiting for " + (time + last) + " miliseconds before next link");
System.Threading.Thread.Sleep(time + last);
driver.Navigate().Back();
System.Threading.Thread.Sleep(2000);
}
catch (Exception e2)
{
Console.WriteLine(e2);
Console.ReadLine();
}
}
}
catch (Exception e1)
{
Console.WriteLine(e1);
Console.ReadLine();
}
Console.WriteLine("Test finished.");
driver.Quit();
}
catch (Exception e)
{
Console.WriteLine(e);
Console.ReadLine();
}
}
}
}
driver.FindElements(By.TagName("a")) 正在为您查找页面上的所有 link。
然后您将使用第一个 link 转到另一个页面:item.Click();
你终于要回去了driver.Navigate().Back();
但这不是初始页面(根据 selenium 的意见)。并且第一步存储的所有 link 都没有了,因为你的初始页面没有了。这就是为什么你不能点击第二个。
您需要在每个 driver.Navigate().Back();
之后重新查找所有 link
或者最好将所有 href 存储到 linksList.Add(Item.getAttribute("href")); 等列表中并使用存储的 href。
当我尝试查找所有链接并在我的控制台应用程序中浏览它们时,我不断收到 StaleElementReferenceException 错误,我有以下代码并且昨天一整天都在尝试修复它但没有结果:
{
static void Main(string[] args)
{
try
{
Console.WriteLine("Starting the browser...");
IWebDriver driver = new FirefoxDriver();
driver.Navigate().GoToUrl("http://www.site.ro");
System.Threading.Thread.Sleep(2000);
Console.WriteLine("Gathering the Links...");
List<IWebElement> links = new List<IWebElement>();
try
{
foreach (IWebElement item in driver.FindElements(By.TagName("a")))
{
try
{
if (item.Displayed == true)
{
item.Click();
Console.WriteLine("Item is displayed \a\n" + "Navigating to link...");
} else
{
continue;
}
Random r1 = new Random();
Random r2 = new Random();
Random r3 = new Random();
var last = r3.Next(1, 10) * 700;
var mseconds = r2.Next(1, 10) * 500;
var time = mseconds + r1.Next(1, 10) * 300;
Console.WriteLine("Waiting for " + (time + last) + " miliseconds before next link");
System.Threading.Thread.Sleep(time + last);
driver.Navigate().Back();
System.Threading.Thread.Sleep(2000);
}
catch (Exception e2)
{
Console.WriteLine(e2);
Console.ReadLine();
}
}
}
catch (Exception e1)
{
Console.WriteLine(e1);
Console.ReadLine();
}
Console.WriteLine("Test finished.");
driver.Quit();
}
catch (Exception e)
{
Console.WriteLine(e);
Console.ReadLine();
}
}
}
}
driver.FindElements(By.TagName("a")) 正在为您查找页面上的所有 link。
然后您将使用第一个 link 转到另一个页面:item.Click();
你终于要回去了driver.Navigate().Back();
但这不是初始页面(根据 selenium 的意见)。并且第一步存储的所有 link 都没有了,因为你的初始页面没有了。这就是为什么你不能点击第二个。
您需要在每个 driver.Navigate().Back();
之后重新查找所有 link或者最好将所有 href 存储到 linksList.Add(Item.getAttribute("href")); 等列表中并使用存储的 href。