Хорошо, на самом деле это более сложный вопрос, чем я предполагал, но вот частичное решение.
Функция ChildrenOfType может получить прямого потомка некоторых элементов, включая Div, List и ListItem.Я включил пример того, как это работает.
Однако проблема с этим примером заключается в том, что при отображении текста ListItem с использованием .Text отображается не только непосредственный текст, но и тексттакже дочерние элементы.
По крайней мере, этот пример кода предоставит способ просмотра иерархии списка.Вы можете вывести текст только в том случае, если listItem не имеет дочерних элементов, но я не знаю, насколько хорошо это работает в вашей ситуации.
public static void listSurfer(Div div)
{
Console.WriteLine("Outer List:");
var innerLists = div.ChildrenOfType<List>();
var innerListItems = div.ChildrenOfType<ListItem>();
if (innerListItems.Count > 0)
{
foreach (var innerlist in innerLists)
{
Console.WriteLine("List Item: " + innerlist.Text);
}
}
listSurfer(innerLists, 1);
}
public static void listSurfer(ElementCollection<List> lstCollect, int depth)
{
foreach (List lst in lstCollect)
{
Console.WriteLine(tabNumber(depth) + "innerlist");
var innerLists = lst.ChildrenOfType<List>();
var innerListItems = lst.ChildrenOfType<ListItem>();
if (innerListItems.Count > 0)
{
foreach (var innerlist in innerListItems)
{
Console.WriteLine(tabNumber(depth + 1) + "List Item: " + innerlist.Text);
var subLists = innerlist.ChildrenOfType<List>();
if (subLists.Count > 0)
listSurfer(subLists, depth + 1);
}
}
if (innerLists.Count > 0)
{
listSurfer(innerLists, depth + 1);
}
}
}
public static String tabNumber(int count)
{
String tabs = "";
for (int i = 0; i < count; i++)
{
tabs = tabs + "\t";
}
return tabs;
}
private static int Main(string[] args)
{
Browser browser = new IE(@"C:\test.html");
var treeControl = browser.Div(Find.ById("NestedLists"));
listSurfer(treeControl);
}