WebDriver isTextPresent


(Shaman) #1

столкнулся с проблемой, есть метод:

public boolean isTextPresent(String text){
        try{
        driver.findElement(By.tagName("body")).getText().contains(text);
        return true; 
        } catch (NoSuchElementException e){
            return false;
        }
    }

 

время выполнения метода в среднем три секунды, что оочень много как мне кажется. как его можно оптимизировать?


(Mykhailo Poliarush) #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) #3

Можно еще попробовать через Xpath 

driver.findElement(By.XPath("/html/body")).getText().сontains(text)

Или сделать такой же вызов, только через CSS, в ИЕ будет заметно быстрее

 


(Shaman) #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) #5

Если страница очень нагружена, тогда делай проверку наличия текста на каком-то конкретном элементе. А не на всей странице. 

 

По второму вопросу, может у тебя локатор не правильно написан? Скинь пример HTML и кода, который выполняется в тесте.