我正在尝试浏览页面上有多个标签的系统,每个标签上都有多个页面链接。我知道这与从DOM中删除的元素有关,但我不确定如何使用我的场景解决这个问题。
//Get all the elements in the top tab section
IList<IWebElement> tabIndex = driver.FindElements(By.XPath("//*[@class='TabList ClearFix']//a[@tabindex=-1]"));
//The first page of the frist tab is already accessed
//Get all the page links that are in the left navigation bar, click on the page and then move onto the next one
//Once the last page is accessed, move to the next tab and repeat.
foreach (IWebElement element in tabIndex)
{
Console.WriteLine(element.Text.ToString());
IList<IWebElement> leftIndex = driver.FindElements(By.XPath("//*[@id='LeftMenu']//a[@tabindex=-1]"));
foreach (IWebElement lElement in leftIndex)
{
Console.WriteLine(lElement.Text.ToString());
}
element.Click();
}
我在Console.WriteLine(element.Text.ToString());
收到例外情况
任何帮助将不胜感激。
答案 0 :(得分:1)
陈旧元素:您正在找到一个导致对象的元素&gt;页面更改/重新加载&gt;你正试图使用那个对象。
您的主要问题是您在先前找到的对象列表的<google-chart
type="pie"
data='[["ID", "Life Expectancy", "Fertility Rate", "Region", "Population"],
["CAN", 80.66, 1.67, "North America", 33739900],
["DEU", 79.84, 1.36, "Europe", 81902307],
["DNK", 78.6, 1.84, "Europe", 5523095],
["EGY", 72.73, 2.78, "Middle East", 79716203],
["GBR", 80.05, 2, "Europe", 61801570],
["IRN", 72.49, 1.7, "Middle East", 73137148],
["IRQ", 68.09, 4.77, "Middle East", 31090763],
["ISR", 81.55, 2.96, "Middle East", 7485600],
["RUS", 68.6, 1.54, "Europe", 141850000],
["USA", 78.09, 2.05, "North America", 307007000]]'>
</google-chart>
循环中执行click
操作,这些元素对象在页面更改/重新加载时丢失。
您需要确保页面在查找元素和将其用于操作之间不会发生变化。
不要在可能使用来自循环外部的对象更改页面的循环中执行操作
选项:
- 计算制表符并按索引使用循环中的find
- 找到所有标签,在列表中保存一些foreach
并使用这些属性查找循环中的每个标签
- 使用选择器根据当前选项卡识别选项卡,例如下一个未打开选项卡的选择器
答案 1 :(得分:0)
只是做一些简单的事情,比如将元素集合刮到循环中就应该修复它。这样在循环的顶部,页面再次被删除。
// Get all the elements in the top tab section
//The first page of the frist tab is already accessed
//Get all the page links that are in the left navigation bar, click on the page and then move onto the next one
//Once the last page is accessed, move to the next tab and repeat.
foreach (IWebElement element in driver.FindElements(By.XPath("//*[@class='TabList ClearFix']//a[@tabindex=-1]")))
{
Console.WriteLine(element.Text.ToString());
foreach (IWebElement lElement in driver.FindElements(By.XPath("//*[@id='LeftMenu']//a[@tabindex=-1]")))
{
Console.WriteLine(lElement.Text.ToString());
}
element.Click();
}