6

私は次のように言ってください

<div class="facetContainerDiv">
    <div>
        <label class="facetLabel">
            <input class="facetCheck" type="checkbox" />
        </label>
        <label class="facetLabel">
            <input class="facetCheck" type="checkbox" />
        </label>
        <label class="facetLabel">
            <input class="facetCheck" type="checkbox" />
        </label>
        <label class="facetLabel">
            <input class="facetCheck" type="checkbox" />
        </label>
        <label class="facetLabel">
            <input class="facetCheck" type="checkbox" />
        </label>
    </div>
</div>

次に、指定したインデックスに基づいてチェックボックスにチェックマークを付けます。だから私は以下のようなメソッドを書きます

div class = "facetContainerDiv"内のすべての要素にアクセスするにはどうすればよいですか?

私は試した

List<WebElements> elementsList =  driver.findElements(By.cssSelector(".facetContainerDiv"));
for(WebElement checkBox:elementsList) {
    int i=0;
    checkBox = elementsList.get(i);
     bla bla bla..
}

上記のコードでは、elementsListには「type」がnullの要素が1つだけあります。

4

4 に答える 4

7

ケースに正確に一致する以下のコードに従ってください。

  1. classfacetContainerDivとして、div の下に div の Web 要素のインターフェースを作成します。

つまり

<div class="facetContainerDiv">
    <div>

    </div>
</div>

2. 2 番目の div 内のすべての要素を含む IList を作成します。

<label class="facetLabel">
   <input class="facetCheck" type="checkbox" />
</label>
<label class="facetLabel">
   <input class="facetCheck" type="checkbox" />
</label>
<label class="facetLabel">
   <input class="facetCheck" type="checkbox" />
</label>
<label class="facetLabel">
   <input class="facetCheck" type="checkbox" />
</label>
<label class="facetLabel">
   <input class="facetCheck" type="checkbox" />
</label>

3. インデックスを使用して各チェック ボックスにアクセスします。

以下のコードを見つけてください

using System;
using System.Collections.Generic;
using OpenQA.Selenium;
using OpenQA.Selenium.Firefox;
using OpenQA.Selenium.Support.UI;

namespace SeleniumTests
{
  class ChechBoxClickWthIndex
    {
        static void Main(string[] args)
        {

            IWebDriver driver = new FirefoxDriver();

            driver.Navigate().GoToUrl("file:///C:/Users/chery/Desktop/CheckBox.html");

            // Create an interface WebElement of the div under div with **class as facetContainerDiv**
            IWebElement WebElement =    driver.FindElement(By.XPath("//div[@class='facetContainerDiv']/div"));
            // Create an IList and intialize it with all the elements of div under div with **class as facetContainerDiv**
            IList<IWebElement> AllCheckBoxes = WebElement.FindElements(By.XPath("//label/input"));
            int RowCount = AllCheckBoxes.Count;
            for (int i = 0; i < RowCount; i++)
            {
            // Check the check boxes based on index
               AllCheckBoxes[i].Click();

            }
            Console.WriteLine(RowCount);
            Console.ReadLine(); 

        }
    }
}
于 2013-03-21T07:53:36.427 に答える
4

findElements ステートメントがすべての div を取得するかどうかはわかりません。私は次のことを試します:

List<WebElement> elementsRoot = driver.findElements(By.xpath("//div[@class=\"facetContainerDiv\"]/div));

for(int i = 0; i < elementsRoot.size(); ++i) {
     WebElement checkbox = elementsRoot.get(i).findElement(By.xpath("./label/input"));
     checkbox.click();
     blah blah blah
}

ここでの考え方は、ルート要素を取得してから、別の「サブ」xpath または任意のセレクターを使用してノード要素を見つけることです。もちろん、必要な要素を適切に見つけるために、xpath またはセレクターを調整する必要がある場合があります。

于 2013-03-21T03:52:47.287 に答える
2

クラスのすべての要素を要求していますが、facetContainerDivそのうちの1つ(最も外側のdiv)のみです。やってみませんか

List<WebElement> checks =  driver.findElements(By.class("facetCheck"));
// click the 3rd checkbox
checks.get(2).click();
于 2013-03-21T03:49:56.787 に答える