Подтвердить что ты не робот

Как установить флажки с помощью 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> 
4b9b3361

Ответ 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();

        }