Shaman
(Shaman)
31.Октябрь.2011 11:27:50
#1
столкнулся с проблемой, есть метод:
public boolean isTextPresent(String text){ try{ driver.findElement(By.tagName("body")).getText().contains(text); return true; } catch (NoSuchElementException e){ return false; } }
время выполнения метода в среднем три секунды, что оочень много как мне кажется. как его можно оптимизировать?
polusok
(Mykhailo Poliarush)
31.Октябрь.2011 13:53:29
#2
провел измерения с помощью вот этого кода, и у меня команды выполняются не больше одной секунды
{syntaxhighlighter brush: java;fontsize: 100; first-line: 1; }final long startTime = System.nanoTime();
final long endTime;
try {
method()
} finally {
endTime = System.nanoTime();
System.out.println(endTime - startTime);
}{/syntaxhighlighter}
результаты в наносикундах
{syntaxhighlighter brush: java;fontsize: 100; first-line: 1; }return driver.findElement(locator).getText().contains(text);
//15996345
return driver.findElement(locator).getText().matches(text);
//15131243
try {
return driver.findElement(locator).getText().contains(text);
} catch (NoSuchElementException e) {
return false;
}
//25505230
try {
return driver.findElement(locator).getText().matches(text);
} catch (NoSuchElementException e) {
return false;
}
//15890999{/syntaxhighlighter}
потому я бы предложил последний вариант, а если еще дальше надо идти, то будет не так просто
вот например ссылка к рассмотрению http://www.javacodegeeks.com/2010/09/string-performance-exact-string.html
d3unka
(d3unka)
31.Октябрь.2011 13:54:05
#3
Можно еще попробовать через Xpath
driver.findElement(By.XPath("/html/body")).getText() .сontains(text) Или сделать такой же вызов, только через CSS, в ИЕ будет заметно быстрее
Shaman
(Shaman)
31.Октябрь.2011 14:57:22
#4
Дело в том что у меня есть тест который около 20 раз кликает по чекбоксам и проверяет наличие текста, поскольку страница довольно нагружена кодом то каждая проверка длится около 3 секунд, что в сумме выливается где-то минут в 5 чистого времени. подумываю над тем чтобы вернуть selenium.isTextVisible, поскольку для простого теста слишком значительно время увеличилось.
есть еще вопрос. есть два метода:
public boolean isElementVisible(By locator){ try{ driver.findElement(locator).isDisplayed(); return true; }catch(ElementNotVisibleException skip){ return false; } } public boolean isElementPresent(By locator){ try{ driver.findElement(locator).isDisplayed(); return true; }catch (NoSuchElementException ignored){ return false; } }
cуть в том что у меня есть несколько вкладок с параметрами, и мне нужно проверять видим ли в данный момент на странице элемент, и если не виден то переходить на следующую вкладку. но ни один из этих методов не срабатывает корректно. вылетает ElementNotVisibleException.
d3unka
(d3unka)
31.Октябрь.2011 15:51:58
#5
Если страница очень нагружена, тогда делай проверку наличия текста на каком-то конкретном элементе. А не на всей странице.
По второму вопросу, может у тебя локатор не правильно написан? Скинь пример HTML и кода, который выполняется в тесте.