Если у вас есть доступ к изменению HTML, попробуйте добавить объявление класса в элементы данных таблицы. Тогда вы можете использовать By.ClassName вместо XPath.
Но прежде чем я продолжу, что именно вы пытаетесь сделать? Кажется странным, что
Как только CssSelectors будет полностью добавлен в .Net и IE, это будет отличный вариант, но пока он ненадежен. Помните, что сейчас ваш документ должен отображаться в режиме стандартов.
Возможно, вы захотите рассмотреть только тд, а не тд и й. Хотя это, конечно, выполнимо, это добавляет определенную сложность. Я сделал это ниже для простоты. Обычно вы знаете, сколько их и что они держат, и разбираетесь с ними по отдельности.
Попадая в код, который я обнаружил, было небольшое ускорение при переходе на 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);
}
Перейдите к загрузке исходного кода страницы и синтаксическому анализу, если все, что вы хотите сделать, это перебирать элементы проверки документа. Вернитесь к своему драйверу, когда вам нужно перемещаться / взаимодействовать.