Если у вас есть доступ для изменения HTML, попробуйте добавить объявление класса в элементы данных таблицы. Тогда вы можете использовать By.ClassName вместо XPath.
Но прежде чем я пойду дальше, что именно вы пытаетесь сделать? Кажется странным, что
Как только CssSelectors будет полностью поддерживаться в .Net и IE, это будет отличный вариант, но пока он ненадежен. Помните, что ваш документ должен отображаться в стандартном режиме.
Вы захотите рассмотреть возможность просмотра только td, а не td и th. Хотя это, безусловно, выполнимо, это добавляет определенную сложность. Я сделал это ниже для простоты. Обычно вы знаете, сколько их существует и что они содержат, и разбираетесь с ними отдельно.
Приступая к коду, я обнаружил, что By.TagName немного ускоряется. Это заняло около 20 секунд в 43 строках по 4 столбца.
IWebElement table = driver.FindElement(By.TagName("table"));
ReadOnlyCollection<IWebElement> cells = table.FindElements(By.TagName("td"));
foreach (IWebElement cell in cells)
{
Console.WriteLine(cell.Text);
}
Но затем я попытался загрузить исходный код страницы в память и проанализировать страницу с помощью HtmlAgilityPack. Будьте осторожны с использованием синтаксических анализаторов XML для чтения html-документов, вы обнаружите, что html не может быть идеальным XML. Следующий код занял почти неприличные 96 миллисекунд
HtmlDocument html = new HtmlDocument();
html.LoadHtml(driver.PageSource);
HtmlNodeCollection nodeCollect = html.DocumentNode.SelectNodes("//td");
foreach (HtmlNode node in nodeCollect)
{
Console.WriteLine(node.InnerText);
}
Идите с загрузкой исходного кода страницы и синтаксическим анализом, если все, что вы хотите сделать, это перебирать элементы проверки документа. Вернитесь к своему водителю, когда вам нужно перемещаться / взаимодействовать.
person
pnewhook
schedule
14.09.2010
/html/body/table/tr/*
или/html/body/table/tr/*[self::td or self::th]
- person   schedule 14.09.2010