ユーザー入力によってページ上でタスクを自動化するフォームがありますが、ページ上の要素とのやり取りに問題があります。動的な名前と要素数を持つCheckBoxListです。 HTMLは次のようになります。Selenium C#で変数またはラベルでボックスをチェックする
<ol id="ratingModification_SupplierContact_content">
<label><input type="checkbox" name="searchQuery.vehicleGroups[0].isSelected" value="on" class="vehGrp"> abcd ef (ghi)</label> <br>
<label><input type="checkbox" name="searchQuery.vehicleGroups[1].isSelected" value="on" class="vehGrp"> jklm no (pqr)</label> <br>
</ol>
ここで、「abcd ef(ghi)」は最初のチェックボックスのラベルです。
私はすでに要素からラベルを抽出し、ここではユーザーからの助けを借りて設計された配列にそれらを置くのボタンがあります。
var vehicleGroupInputElements = Builder.Driver.FindElements(By.ClassName("vehGrp"));
var vehicleGroupNames = vehicleGroupInputElements.Select(f => f.FindElement(By.XPath(".."))).Select(f => f.Text).ToArray();
をそして私は私のフォームのにCheckedListBox移入:
vehicleGroupList.Items.AddRange(vehicleGroupNames);
しかし、ユーザーの選択をページに戻そうとすると、問題が発生します。私はIndexOf()とClassNameを使ってインデックスに基づいて選択しようとしましたが、それを動作させるために構文を理解することはできません。失敗した例:
foreach (int userChecks in vehicleGroupList.CheckedItems)
{
int checkIndex = vehicleGroupList.Items.IndexOf(userChecks);
var checkTarget = Builder.Driver.FindElements(By.ClassName("vehGrp"));
checkTarget.IndexOf(checkIndex).Click();
}
int checkIndex cantがIWebElementに変換できないため、コンパイルできません。また、xpathでインデックスを扱う文字列を作成しようとしましたが、要素を見つけることができないか、または複合名の例外をスローしません。失敗例:
foreach (int userChecks in vehicleGroupList.CheckedItems)
{
int checkIndex = vehicleGroupList.Items.IndexOf(userChecks);
string elementTarget = "searchQuery.vehicleGroups[" + checkIndex + "].isSelected";
var checkTarget = Builder.Driver.FindElements(By.XPath(string.Format("//option[contains(text(), {0}]", elementTarget))).Click();
}
は、私はまた、上記と同様のXPathを介したラベルによって要素を検索しようとしたが、それはそれを見つけることはありません。要素を見つけてチェックする正しい方法は何ですか?
を次のように各チェックボックスを順番にクリックしますか? –
私はそれがうまくいくと思います。私は 'foreach(私のフォーム上のチェックされた項目)ページ上の対応するチェックボックスをクリックするつもりだった。しかし、それらを一度にすべてクリックすることもできます。 –