t.me/atinfo_chat Telegram группа по автоматизации тестирования

Как найти все елементы на странице в конкретной таблице с атрибутом class ? доступ к строкам html таблици.


(Taras) #1

Есть проблемка, на клик формируеться таблица:

Нужно пощитать количество таких вот штук:

" class = loadingDuration " в теле таблици, один такой рекорд отвечает за одну строку таблици.

Думаю нужно xpath юзать, но не могу правильно попасть в точку, как его записать.

 

 

<table id="testResults">
<tbody>
<tr>
<th>User name:</th>
<th>Duration:</th>
</tr>
</tbody>
<tr>
<td colspan="2">Started at 17:28:35</td>
</tr>
<tr>
<td colspan="2">Started at 17:28:40</td>
</tr>
<tr>
<td>2222:</td>
<td class="loadingDuration">-1627.471s</td>
</tr>
</table>

 

 

Пробовал так

List <WebElement> rows =  driver.findElements(By.xpath("//td[contains(@class,'loadingDuration')]"));

 

не получаеться. Всегда rows.size () = 0 при дебагинге.

 

 

 

 

Помогите)


(Taras) #2

Окей, конструкция ясна

 

WebElement foo = wait.until(new Function<WebDriver, WebElement>() {
09      public WebElement apply(WebDriver driver) {
10        return driver.findElement(By.id("foo"));
11      }
12    });

 

 

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


(Mykhailo Poliarush) #3

по сути это идет описание метода в методе

http://selenium.googlecode.com/svn/trunk/docs/api/java/org/openqa/selenium/support/ui/Wait.html

тут будет более наглядно, например

{syntaxhighlighter brush: bash;fontsize: 100; first-line: 1; }// Waiting 30 seconds for an element to be present on the page, checking // for its presence once every 5 seconds. Wait<WebDriver> wait = new FluentWait<WebDriver>(driver) .withTimeout(30, SECONDS) .pollingEvery(5, SECONDS) .ignoring(NoSuchElementException.class);

WebElement foo = wait.until(new Function<WebDriver, WebElement>() {
public WebElement apply(WebDriver driver) {
return driver.findElement(By.id(“foo”));
}
});{/syntaxhighlighter}что происходит: метод until вызывает анонимный метод function c регулярностью в 5 секунд на протяжении 30 секунд 


(Mykhailo Poliarush) #4

я думаю проблема не в xpath, так как //td[contains(@class,'loadingDuration')] xpath правильный, а в доступности елемента на странице

попробуйте сначала дождаться появления элемента на странице, а потом делать проверку


(Taras) #5

такс, с пасом разобрался, не там кусок кода влупил просто)) Не видило значение переменной по ходу, короче уже находит елементы.

Возник другой вопрос: 

как управлять такими контрукциями: click - smth happen (request) - wait until smth appear (for elements present) 

 

тоесть, кликаю - пошел запрос, скрипт должен ждать пока не появяться елементы конкретные вот по такой интерпретации x-patha List <WebElement> rows =  driver.findElements(By.xpath("//td[contains(@class,'loadingDuration')]"));

 

то есть как написать такую штуку, что б скрипт ждал до того момента пока rows.size () будет равно конкретному числу. что то типа while (rows.size()!=3){ wait.until () } - вот именно не знаю как етот вейт антил забацать.

Спасибо.


(Mykhailo Poliarush) #6

для ожидания лучше воспользоваться классом WebDriverWait

http://selenium.googlecode.com/svn/trunk/docs/api/java/org/openqa/selenium/support/ui/WebDriverWait.html

пример использования

{syntaxhighlighter brush: java;fontsize: 100; first-line: 1; }WebDriver driver = new FirefoxDriver(); driver.get("http://somedomain/url_that_delays_loading"); WebElement myDynamicElement = (new WebDriverWait(driver, 10)) .until(new ExpectedCondition<WebElement>(){ @Override public WebElement apply(WebDriver d) { return d.findElement(By.id("myDynamicElement")); }});{/syntaxhighlighter}

дальше просто надо написать правильный xpath, который будет проверять на наличие 3х строк


(Taras) #7

new ExpectedCondition<WebElement>()

 

не очень понимаю что это )??))


(Mykhailo Poliarush) #8

нужно только определить условие ожидания через 

{syntaxhighlighter brush: bash;fontsize: 100; first-line: 1; }return driver.findElement(By.id("foo")); {/syntaxhighlighter}

т.е. в копируете эту конструкцию и меняете только один строку 

{syntaxhighlighter brush: bash;fontsize: 100; first-line: 1; highlight: [7]; }WebDriver driver = new FirefoxDriver(); driver.get("http://somedomain/url_that_delays_loading"); WebElement myDynamicElement = (new WebDriverWait(driver, 10)) .until(new ExpectedCondition<WebElement>(){ @Override public WebElement apply(WebDriver d) { return d.findElement(By.id("myDynamicElement")); }});{/syntaxhighlighter}

(Taras) #9

Ок, будем пробовать разбираться, спасибо