仮想化を使用してアイテムをHTMLからJavaScriptにロードするigComboドロップダウンコントロールがあります。ドロップダウンの最初の展開時に、項目の完全なリストはリスト/ HTMLにはなく、最初の10項目についてのみです。ユーザーがスクロールダウンすると、新しい項目がHTMLにロードされます。だから、単純にSelecElement.SelectByTextを使うことはできません。あるいは、単純な関数を使って、HTMLからforループ内のすべてのli要素を格納することはできません。クリックしたい項目がインデックス11以上にある場合、 HTMLはまだありません。ドロップダウン(igCombo)要素を1ページずつリストの末尾までスクロールします。
これを攻撃する唯一の方法は、forループを使用してHTMLの初期項目を格納することです。次に、ユーザーが渡したitemToClick変数の値がこのforループ内の項目と一致する場合は、その項目をクリックします。それ以外の場合は、1ページ全体をスクロールして次の10項目をロードします。 itemToClick値がスクロールした後のアイテムのいずれかと一致するまでループを繰り返すか、またはスクロールがドロップダウンの下部に達するまでそのループを繰り返し、その時点でそのアイテムが存在しないことをユーザに伝えます。
私のメソッドコールはここにあります。私はドロップダウンにリストの一番下にある「MTV」、をクリックしていることに注意してください:ここで
ClickListItemByNameVirtualization(driver, dropDownElem, scrollBarElem, "MTV");
は方法です。 まだコメントがありませんコメントを参照してください。それは私が助けが必要なものです。私は、カップルの事を試してみましたが、私は必要なもののために動作するコードを考え出すカント:
public void ClickListItemByNameVirtualization(IWebDriver browser, IWebElement divElemOfScrollBar, IWebElement ulElemOfDropDown, string itemName)
{
bool topOfList = true;
do
{
if (topOfList == false)
{
// NOT CODED YET: I need a method that scrolls down page by page within a dropdown frame. For reference of how I scroll statically inside a
// frame, see my ScrollToWithinFrame method that I referenced at the bottom of this post
ScrollDownPageWithinDropdown();
}
topOfList = false;
// Store all li elements within the unordered list
var liElems = ulElemOfDropDown.FindElements(By.TagName("li")).ToList();
// Loop through all list items
foreach (var liElem in liElems)
{
// if the current list item's text value in the for loop equals the users passed parameter itemName
if (liElem.Text == itemName)
{
liElem.Click();
Thread.Sleep(0200);
return;
}
}
// NOT CODED YET: I need code to add to ScrollBarEnd that returns true or false. Only do the above code if ScrollBarEnd is false
} while (!ScrollBarEnd());
}
そして最後に、参考のために、ここでフレーム内をスクロールするために私のコードは次のとおりです。
public void ScrollToWithinFrame(IWebDriver browser, IWebElement divElemOfScrollBar, int xOrYCoordinate, string HorizontalOrVertical)
{
IJavaScriptExecutor js = (IJavaScriptExecutor)browser;
if (HorizontalOrVertical == "Vertical")
{
js.ExecuteScript("arguments[0].scrollTop = arguments[1];", divElemOfScrollBar, xOrYCoordinate);
}
if (HorizontalOrVertical == "Horizontal")
{
// Scroll inside the popup frame element vertically. See the following...
// http://stackoverflow.com/questions/22709200/selenium-webdriver-scrolling-inside-a-div-popup
js.ExecuteScript("arguments[0].scrollLeft = arguments[1];", divElemOfScrollBar, xOrYCoordinate);
}
}
ありがとうございました。これはうまくいくかもしれませんが、スクロールするJavaScriptは私のためにリストの最後までスクロールしています。ページをスクロールするコードはありません –