Селекторные элементы селена - я думал, что xPath был самым медленным?
Я провел несколько тестов на общедоступном веб-сайте, чтобы узнать, смогу ли я найти различия в производительности нескольких различных селекторов CSS Selenium. Я управлял одним центром с пятью узлами; mac / chrome / local, mac / safari / local, mac / ff / local, win7 / ie9 / localVM и win8 / ie10, localVM. Все тесты выполнялись параллельно, чтобы попытаться смоделировать, как я их обычно выполняю. Я был удивлен, увидев, что селекторы xPath не оказались тем дьяволом, которого я ожидал. Может быть, в моих тестах есть что-то напуганное? У кого-нибудь есть понимание?
Вот тестовый код ...
int cycles = 500;
int yVal = 0;
getPage(“http://www.princeton.edu");
/* try an element that does not have an id*/
startStopwatch();
for (int i = 0; i < cycles; i++)
yVal = driver.findElementByCssSelector("a[href='/main/news/events/']").getLocation().y;
print("By CSS: " + elapsedSeconds());
startStopwatch();
for (int i = 0; i < cycles; i++)
yVal = driver.findElementByCssSelector("div[id='events'] a[href='/main/news/events/']").getLocation().y;
print("By CSS using id: " + elapsedSeconds());
startStopwatch();
for (int i = 0; i < cycles; i++)
yVal = driver.findElementByXPath("//a[@href=\'/main/news/events/']").getLocation().y;
print("By xPath: " + elapsedSeconds());
/* try an element with an id */
//by id
startStopwatch();
for (int i = 0; i < cycles; i++)
yVal = driver.findElementById("events").getLocation().y;
print("By Id: " + elapsedSeconds());
//by CSS
startStopwatch();
for (int i = 0; i < cycles; i++)
yVal = driver.findElementByCssSelector("div[id='events']").getLocation().y;
print("By CSS: " + elapsedSeconds());
// an unnecessarily long xPath expression
startStopwatch();
for (int i = 0; i < cycles; i++)
yVal = driver.findElementByXPath("//span[text()='News at Princeton']/ancestor::div[1]/following-sibling::div[1]").getLocation().y;
print("By longer xPath: " + elapsedSeconds());
// somewhat shorter xPath
startStopwatch();
for (int i = 0; i < cycles; i++)
yVal = driver.findElementByXPath("//span[text()='Featured Events']/ancestor::div[1]").getLocation().y;
print("By shorter xPath: " + elapsedSeconds());
Вот результаты, показывающие, что xPath хранит свой собственный, все время в секундах для 500 итераций.
Safari был самым беспорядочным исполнителем, время для каждого теста было странно разным.
princeton.edu - это довольно заурядная веб-страница с довольно простыми селекторами, но, похоже, предполагает, что xPath не так уж и плох. Я обнаружил почти то же самое, когда тестировал свой рабочий сайт.
Есть мысли о том, что мне здесь не хватает ??