Есть выпадающее меню:
Проблема в том, что текст и чекбокс - это разные элементы.
Произвожу поиск по тесту:
for(WebElement l: List<WebElement>) {
if (l.getText().equals(searchElement)) {
l.click(); // так получается, что жмакается на текст
break;
}
}
А вот как нажать на чек бокс, пока в раздумиях. Подскажите, кто сталкивался.
Пример DOM-а:
Через xpath можно найти элемент по тексту и жмякать по нему
Как нибудь так: //*[.‘Выбрать все’]/…/preceding-sibling::td/label
Почитайте это
biercoff
(Andrew Zakordonets)
16.Июнь.2015 09:10:30
#3
Сделай лист вебэлементов по tr тэгу. Внутри цикла находишь два тд элемента относительно твоего tr - 1-ый - чекбокс, второй текст. И потом говоришь что если у второго элемента текст совпадает, то кликаем по первому элементу. Что то вроде этого :
List<WebElements> list = driver.findElements.byxpath("//*[@class='GIAUENBEQ'] //tr")
for (WebElement tr: list){
WebElement checkBox = tr.findElement.byId("SelectItem_cbSelected");
WebElement text = tr.findElement.byId("SelectItem.lText");
if (text.getText().equals(searchElement)){
checkBox.click();
}
}
Это больше псевдокод, чем рабочий джава код, но думаю суть ты понял
1 лайк
Да, то что нужно! Спасибо!
Лучше бы все это написать через XPath грамотно, чем делать екстрастепы в коде.
Написать пример грамотного xPath можете?
Отталкивайтесь от моего примера, либо скиньте код страницы )
1 лайк
легко, скиньте пожалуйста кусок html-а, который на скрине.
<div id="MultipleSelectionDropdown_dropDownBtn" class="btn-group" title="АРМ менеджера касира">
<a class="btn" href="javascript:;" style="width: 361px; overflow: hidden;">
<i/>
АРМ менеджера касира
</a>
<a class="btn dropdown-toggle" href="javascript:;" data-toggle="dropdown">
<i/>
<span class="caret"/>
</a>
<ul class="dropdown-menu" style="max-height: 150px; width: 250px; overflow: auto;">
<div>
<table class="GIAU1ENBEQ" cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td align="left" style="vertical-align: top;">
<label id="SelectItem_cbSelected" class="checkbox" for="gwt-uid-160">
<input id="gwt-uid-160" type="checkbox" value="on" tabindex="0"/>
<span/>
</label>
</td>
<td align="left" style="vertical-align: top;">
<div id="SelectItem_lText" class="gwt-Label">Выбрать все</div>
</td>
</tr>
</tbody>
</table>
</div>
<div class="gwt-Label"/>
<div>
<table class="GIAU1ENBEQ" cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td align="left" style="vertical-align: top;">
<label id="SelectItem_cbSelected" class="checkbox" for="gwt-uid-765">
<input id="gwt-uid-765" type="checkbox" value="on" tabindex="0"/> <span/>
</label>
</td>
<td align="left" style="vertical-align: top;">
<div id="SelectItem_lText" class="gwt-Label">Терминалы самообслуживания</div>
</td>
</tr>
</tbody>
</table>
</div>
<div>
<table class="GIAU1ENBEQ" cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td align="left" style="vertical-align: top;">
<label id="SelectItem_cbSelected" class="checkbox" for="gwt-uid-768">
<input id="gwt-uid-768" type="checkbox" value="on" tabindex="0"/>
<span/>
</label>
</td>
<td align="left" style="vertical-align: top;">
<div id="SelectItem_lText" class="gwt-Label">Интернет банкинг</div>
</td>
</tr>
</tbody>
</table>
</div>
<div>
<table class="GIAU1ENBEQ" cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td align="left" style="vertical-align: top;">
<label id="SelectItem_cbSelected" class="checkbox" for="gwt-uid-771">
<input id="gwt-uid-771" type="checkbox" value="on" tabindex="0" checked=""/>
<span/>
</label>
</td>
<td align="left" style="vertical-align: top;">
<div id="SelectItem_lText" class="gwt-Label">АРМ менеджера касира</div>
</td>
</tr>
</tbody>
</table>
</div>
</ul>
</div>
Denis_Vovchenko:
//div[text()=‘Выбрать все’]//…//…//input[contains(@id ,‘gwt-uid’)]
Можно просто создать метод, который будет пассить по какому лейблу искать нужный вам чекбокс.
public void clickOnCheckBoxUSingItsLabel(string labelText)
{
IWebElement checkBox = WebDriver.FindElement(By.XPath(string.Format("//div[text()='{0}']//..//..//input[contains(@id,'gwt-uid')]", labelText)));
checkBox.Click();
}
1 лайк
Спасибо! Все таки лучше создам(создал) метод. В моем случае это будет попрактичнее. Но ваш пример xPath-a, на заметку взял.
1 лайк
ZoLToR
(Pavel Ordenko)
23.Июнь.2015 15:05:44
#13
Я бы запилил какой-нить xPath типа
//tr[contains(., 'Выбрать все')]//input[@type='checkbox']
И вместо “Выбрать все” подставлять соответствующий текст для чек-бокса