Frage

Ich bin versucht, Selen-Dotnet-2.0a5 zu durchlaufen viele Tabellen zu verwenden und zu verwenden XPath haben. z;

var tableRows = _table.FindElements(By.TagName("tr"));

foreach (var row in tableRows)
{ 
    row.FindElements(By.XPath("td|th"));
    //iterate through tablecells and get text of each
}

Durchschnittliche mal zu durchlaufen etwa 50 Zeilen, firefox 0-2 sec, Chrom 6-8 sec, IE 60-70 sec.

müssen die meisten meiner Tests in IE ausgeführt werden soll, werden alle Tipps, was kann ich besser machen XPath Leistung zu bekommen?

War es hilfreich?

Lösung

Wenn Sie den Zugriff auf den HTML zu ändern, versuchen Sie setzen in einer Klassendeklaration auf den Tabellendatenelemente. Dann könnten Sie By.ClassName statt XPath verwenden.

Aber bevor ich weiter gehen, was genau wollen Sie tun? Es scheint seltsam, dass

Sobald CssSelectors vollständig in .NET und IE supprted ist wird es eine gute Option sein, aber jetzt ist es nicht zuverlässig. Denken Sie daran, für jetzt, Ihr Dokument Anforderungen im Standardmodus gemacht werden.

Sie werden betrachtet nur td betrachten wollen und nicht td und th. Während es sicherlich machbar ist, fügt es ein gewisses Maß an Komplexität. Ich habe für simplicities willen, dass unten getan. Normalerweise wissen Sie würden, wie viele th dort sind und was sie halten, und separat mit ihnen umgehen.

Ankommen auf den Code, den ich fand es war eine leichte Beschleunigung auf By.TagName gehen. Dies dauerte etwa 20 Sekunden über 43 Zeilen mal 4 Spalten.

        IWebElement table = driver.FindElement(By.TagName("table"));
        ReadOnlyCollection<IWebElement> cells = table.FindElements(By.TagName("td"));
        foreach (IWebElement cell in cells)
        {
            Console.WriteLine(cell.Text);
        }

Aber dann habe ich versucht, die Seite Quelle in den Speicher geladen und Parsen der Seite mit dem HtmlAgilityPack . Seien Sie vorsichtig bei XML-Parser mit HTML-Dokumente zu lesen, werden Sie feststellen, html nicht perfekt XML sein kann. Der folgende Code nahm und fast obszön 96 Millisekunden

        HtmlDocument html = new HtmlDocument();
        html.LoadHtml(driver.PageSource);
        HtmlNodeCollection nodeCollect =  html.DocumentNode.SelectNodes("//td");
        foreach (HtmlNode node in nodeCollect)
        {
            Console.WriteLine(node.InnerText);
        }

Gehen Sie mit Lade Seite Quelle und Parsen, wenn alles, was Sie wollen, es zu tun Iterierte durch ein Dokument Element zu überprüfen. Wieder zurück zu Ihrem Fahrer, wenn Sie brauchen, um navigate / interact.

Andere Tipps

Ich hatte immer das gleiche Problem mit Selen 1, ich habe es verbessert, indem die 3rd-Party-XPath-Bibliothek zu aktualisieren, die es nicht sicher verwendet werden, wenn dies gilt nach wie vor zu Selen 2 ... aber letztlich ohne sie an den Browser nativen sind es wasn‘ t schnell genug.

Am Ende, wenn ich brauche, um so etwas wie Ihr Beispiel und CSS-Selektoren wäre es einfach nicht schneiden würde ich nur den gesamten DOM von Selen zurückzukehren und den Baum in Code analysiere andere Bibliothek verwenden und durchlaufen sie auf diese Weise. Bit eines schmutzigen Hack aber nicht umgehen Sie langsam IE XPath.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top