Как установить флажки с помощью selenium java webdriver?
Как проверить флажки с помощью id/xpath. Есть ли какой-либо метод, аналогичный выбору по видимому тексту для выпадающего списка.
Пройдя примеры, приведенные для всех других связанных вопросов, я не смог найти подходящее решение, которое будет работать кратким образом, что несколькими строками или методами я могу проверить chekbox или переключатель.
Любая помощь будет оценена по достоинству.
Ниже приведен фрагмент HTML-раздела:
<tbody>
<tr>
<td>
<span class="120927">
<input id="ctl00_CM_ctl01_chkOptions_0" type="checkbox" name="ctl00$CM$ctl01$chkOptions$0"/>
<label for="ctl00_CM_ctl01_chkOptions_0">housingmoves</label>
</span>
</td>
</tr>
<tr>
<td>
<span class="120928">
<input id="ctl00_CM_ctl01_chkOptions_1" type="checkbox" name="ctl00$CM$ctl01$chkOptions$1"/>
<label for="ctl00_CM_ctl01_chkOptions_1">Seaside & Country Homes</label>
</span>
</td>
</tr>
</tbody>
Ответы
Ответ 1
Выбор флажка аналогичен нажатию кнопки.
driver.findElement(By.id("idOfTheElement")).click();
сделает.
Однако вы также можете проверить, установлен ли флажок. Следующий фрагмент проверяет, выбран ли флажок. Если он не выбран, он выбирает.
if ( !driver.findElement(By.id("idOfTheElement")).isSelected() )
{
driver.findElement(By.id("idOfTheElement")).click();
}
Ответ 2
Я понимаю, что этот вопрос прошел уже несколько месяцев, но я только что нашел его и столкнулся с той же проблемой и нашел решение. Похоже, что IE-драйвер не взаимодействует со всем так же, как это делают другие драйверы, и флажки являются одним из этих случаев.
Хитрость с флажками заключается в том, чтобы отправить пробел вместо использования щелчка (требуется только в IE), например, на С#:
if (driver.Capabilities.BrowserName.Equals("internet explorer"))
driver.findElement(By.id("idOfTheElement").SendKeys(Keys.Space);
else
driver.findElement(By.id("idOfTheElement").Click();
Ответ 3
Чтобы установить флажок для "Seaside and Country Homes", используйте этот XPath:
//label[text()='Seaside & Country Homes']/preceding-sibling::input[@type='checkbox']
Чтобы установить флажок "housingmoves", используйте этот XPath:
//label[text()='housingmoves']/preceding-sibling::input[@type='checkbox']
Принцип здесь заключается в том, чтобы получить ярлык с нужным текстом, а затем установить флажок до, поскольку это похоже на то, как выкладывается ваш HTML-код.
Чтобы получить все флажки, вы начнете немного выше, а затем сработаете, чтобы сказать, получите таблицу, а затем установите флажок в пределах диапазона:
//table/descendant::span/input[@type='checkbox']
Ответ 4
Это поможет -
IWebElement elementToClick = driver.findElement(By.xpath(""//input[contains(@id, 'lstCategory_0')]"));
elementToClick.Click();
Вы также можете передать идентификатор.
Если вы хотите что-то вроде видимого текста, вы можете "найти элемент" по имени, если у них есть имена.
Ответ 5
Вы можете использовать следующий код:
List<WebElement> checkbox = driver.findElements(By.name("vehicle"));
((WebElement) checkbox.get(0)).click();
мой html-код был следующим:
<.input type="checkbox" name="vehicle" value="Bike">I have a bike<br />
<.input type="checkbox" name="vehicle" value="Car">I have a car <br />
Ответ 6
Решение, использующее WebDriver и С#, приведено ниже. Основная идея состоит в том, чтобы получить идентификатор флажка из атрибута label '' for 'и использовать его для определения флажка.
Код также установит состояние флажка только в том случае, если его нужно изменить.
public void SetCheckboxStatus(string value, bool toCheck)
{
//get the label containing the checkbox state
IWebElement labelElement = this.Driver.FindElement(By.XPath(string.Format("//label[.='{0}']",value)));
string checkboxId = labelElement.GetAttribute("for");
IWebElement checkbox = this.Driver.FindElement(By.Id(checkboxId));
if (toCheck != checkbox.Selected)
{
checkbox.Click();
}
}
Ответ 7
Если вы хотите щелкнуть по всем флажкам сразу, метод, подобный этому, будет делать:
private void ClickAllCheckboxes()
{
foreach (IWebElement e in driver.FindElements(By.xpath("//input[@type='checkbox']")))
{
if(!e.Selected)
e.Click();
}
}
Ответ 8
Решение для С#
try{
IWebElement TargetElement = driver.FindElement(By.XPath(xPathVal));
if (!TargetElement.Selected)
{
TargetElement.SendKeys(Keys.Space);
}
}
catch (Exception e)
{
}
Ответ 9
Выполнение этого подхода фактически переключит флажок; .isSelected()
в java/Selenium2, по-видимому, всегда возвращает false
[по крайней мере, с версиями java/selenium/Firefox, которые я тестировал с помощью].
Выбор правильного флажка не там, где проблема, а скорее, правильно отличить исходное состояние от ненужного отказа от повторного щелчка по уже отмеченному ящику.
Ответ 10
Чтобы выбрать флажок, используйте класс "WebElement"
. Для работы с раскрывающимся списком используйте класс "Select"
.
Ответ 11
Шаг 1:
Локатор объектов, который предполагается использовать здесь, - XPath. Итак, выведите XPath для этих 2 флажков.
String housingmoves="//label[contains(text(),'housingmoves')]/preceding-sibling::input";
String season_country_homes="//label[contains(text(),'Seaside & Country Homes')]/preceding-sibling::input";
Шаг 2:
Выполнить Нажмите на флажки
driver.findElement(By.xpath(housingmoves)).click();
driver.findElement(By.xpath(season_country_homes)).click();
Ответ 12
Для частичного соответствия Сделайте следующее
getDriver().findElement(By.cssSelector("<tag name>[id*='id pattern to look for']")).click();
Ответ 13
Вот версия С# Скотта Кроу. Я обнаружил, что и IEDriver, и ChromeDriver ответили на отправку Key.Space вместо того, чтобы нажимать на этот флажок.
if (((RemoteWebDriver)driver).Capabilities.BrowserName == "firefox")
{
// Firefox
driver.FindElement(By.Id("idOfTheElement")).Click();
}
else
{
// Chrome and IE
driver.FindElement(By.Id("idOfTheElement")).SendKeys(Keys.Space);
}
Спасибо Скотту за то, что он направил меня в правильном направлении.
Ответ 14
Может быть, хорошая отправная точка:
isChecked = driver.findElement((By.id("idOftheElement"))).getAttribute("name");
if(!isChecked.contains("chkOptions$1"))
{
driver.FindElement(By.Id("idOfTheElement")).Click();
}
Ответ 15
Я обнаружил, что иногда JavaScript не позволяет мне щелкнуть этот флажок, потому что он работал с элементом по событию onchange.
И это предложение помогает мне разрешить проблему:
driver.findElement(By.xpath(".//*[@id='theID']")).sendKeys(Keys.SPACE);
Ответ 16
Я пытался с различным подходом, но ничего не получилось. Я продолжал получать "Не могу щелкнуть элемент" или ElementNotVisibleException. Я смог найти вход, но не смог проверить его. Теперь я нажимаю на div, который содержит флажок, и он работает со следующим HTML (CSS на основе начальной загрузки).
@foreach (var item in Model)
{
<tr>
<td>
<div id="@item.Id" class="checkbox">
<label><input type="checkbox" class="selectone" value="@item.Id"></label>
</div>
</td>
<td val="@item.Id">
@item.Detail
</td>
<td>
<div>@item.Desc
</div>
</td>
<td>
@Html.ActionLink("Edit", "Create", new { EditId = item.Id })
</td>
</tr>
}
Это код для WebDriver
var table = driver.FindElement(By.TagName("table"));
var tds = table.FindElements(By.TagName("td"));
var itemTds = tds.Where(t => t.Text == itemtocheck);
foreach (var td in itemTds)
{
var CheckBoxTd = tds[tds.IndexOf(td) - 1];
var val = td.GetAttribute("val");
CheckBoxTd.FindElement(By.Id(val)).Click();
}
В этом подходе я указываю id элемента как id для div, а также добавляю атрибут для td с этим id. Как только я найду td элемента, который нужно проверить, я могу найти div до этого td и щелкнуть его. Мы также можем использовать запрос xpath, который поддерживает ранее (здесь приведен пример http://learn-automation.com/how-to-write-dynamic-xpath-in-selenium/).
Ответ 17
Здесь ниже код сначала получит все флажки, присутствующие на странице, а затем снимет все флажки.
List<WebElement> allCheckbox = driver.findElements(By
.xpath("//input[@type='checkbox']"));
for (WebElement ele : allCheckbox) {
if (ele.isSelected()) {
ele.click();
}