45

ID または XPath 式を使用してチェックボックスをチェックするにはどうすればよいですか? ドロップダウンの可視テキストによる選択に似た方法はありますか?

他のすべての関連する質問に示されている例を調べたところ、いくつかの行または方法でチェックボックスまたはラジオボタンをチェックできる簡潔な方法で機能する適切な解決策を見つけることができませんでした.

サンプルの 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>
4

17 に答える 17

67

チェックボックスを選択することは、ボタンをクリックすることに似ています。

driver.findElement(By.id("idOfTheElement")).click();

しましょう。

ただし、チェックボックスがすでにオンになっているかどうかも確認できます。次のスニペットは、チェックボックスが選択されているかどうかを確認します。選択されていない場合は、選択されます。

if ( !driver.findElement(By.id("idOfTheElement")).isSelected() )
{
     driver.findElement(By.id("idOfTheElement")).click();
}
于 2013-02-04T09:54:53.393 に答える
24

Internet Explorer ドライバーは、他のドライバーと同じようにすべての操作を行うわけではないようです。チェックボックスはそのようなケースの 1 つです。

チェックボックスのトリックはSpace、C# のように、クリックを使用する代わりにキーを送信することです (Internet Explorer でのみ必要)。

if (driver.Capabilities.BrowserName.Equals(“internet explorer"))
    driver.findElement(By.id("idOfTheElement").SendKeys(Keys.Space);
else
    driver.findElement(By.id("idOfTheElement").Click();
于 2013-11-12T17:40:19.847 に答える
6

すべてのチェックボックスを一度にクリックしたい場合は、次のようなメソッドが実行されます。

private void ClickAllCheckboxes()
{
    foreach (IWebElement e in driver.FindElements(By.xpath("//input[@type='checkbox']")))
    {
        if(!e.Selected)
            e.Click();
    }
}
于 2013-07-02T08:50:00.180 に答える
3

次のコードを使用できます。

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/>
于 2013-02-04T13:46:58.477 に答える
1

イベントごとに要素を操作しているため、JavaScript でチェックボックスをクリックできない場合があることがわかりましたonchange

そして、その文は私が問題を許容するのに役立ちます:

driver.findElement(By.xpath(".//*[@id='theID']")).sendKeys(Keys.SPACE);
于 2016-12-02T11:45:46.307 に答える
1

WebDriver と C# を使用したソリューションを以下に示します。重要なアイデアは、ラベルの「for」属性からチェックボックスの ID を取得し、それを使用してチェックボックスを識別することです。

コードは、変更が必要な場合にのみ、チェックボックスの状態も設定します。

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();
    }
}
于 2013-07-02T03:59:53.327 に答える
0

ステップ1:

ここで使用するオブジェクト ロケーターは XPath です。したがって、これら 2 つのチェックボックスの XPath を導出します。

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();
于 2014-04-03T10:13:27.070 に答える
0

さまざまなアプローチで試しましたが、何もうまくいきませんでした。「要素をクリックできません」または ElementNotVisibleException が発生し続けました。

入力を見つけることはできましたが、確認できませんでした。ここで、チェックボックスを含む div をクリックすると、次の HTML ( Bootstrapに基づく 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 を div の ID として指定し、その ID を持つ td の属性も追加します。チェックする必要がある項目の td を見つけたら、その td の前にある div を見つけてクリックします。以前にサポートされていた XPath クエリを使用することもできます (例はhttp://learn-automation.com/how-to-write-dynamic-xpath-in-selenium/です)。

于 2016-12-14T17:16:37.583 に答える
0

このアプローチを実行すると、実際にはチェックボックスが切り替わります。.isSelected()Java/Selenium 2 では、明らかに常に返されますfalse(少なくとも、私がテストした Java、Selenium、および Firefox のバージョンでは)。

問題は適切なチェックボックスを選択することではなく、初期状態を正しく区別して、すでにチェックされているボックスを不必要に再クリックしないようにすることです。

于 2013-02-27T02:26:58.653 に答える
0

チェックボックスを選択するには、"WebElement"クラスを使用します。

ドロップダウン リストを操作するには、"Select"クラスを使用します。

于 2013-07-25T06:54:10.520 に答える
0

部分一致の場合は、次のようにします。

getDriver().findElement(By.cssSelector("<tag name>[id*='id pattern to look for']")).click();
于 2014-12-03T20:09:13.250 に答える
0

多分良い出発点:

isChecked  = driver.findElement((By.id("idOftheElement"))).getAttribute("name");
if(!isChecked.contains("chkOptions$1"))
{
    driver.FindElement(By.Id("idOfTheElement")).Click();
}
于 2015-09-25T09:42:40.430 に答える