1

私はセレン2とクロムドライバーを使用していますが、何をしても明示的な待機が機能しないようです。ajax (リロードなし) を介して動的にデータを生成する要素をクリックし、ページに表示されたときに要素を検索しようとしています。

これは私のコードです

        leagueNameItem.Click();

        IList<IWebElement> outerTables_forEachLeague = new List<IWebElement>();

        var wait = new WebDriverWait(driver, TimeSpan.FromSeconds(10));
        outerTables_forEachLeague = wait.Until<IList<IWebElement>>((d) =>
        {
            return d.FindElements(By.ClassName("boxVerde"));
        });

要素が見つかりません (確かにページ上にあります)。指定された ut は何も返さないため、wait 関数は実際には 10 秒間「待機」しません。何かアイデアはありますか?

4

1 に答える 1

10

問題は、FindElementsすぐに戻り、要素が見つからない場合は有効な空のリスト オブジェクトを返すことです。選択肢は 2 つあります。FindElement要素が存在しない場合に例外をスローする、待機でシングルを使用できます。オブジェクトはそのWebDriverWait例外をキャッチし、要素が見つかるまで再試行します。

ただし、待機からリストを返したいので、もう少し賢くする必要があり、2 番目のオプションにつながります。待機を次のように変更します。

leagueNameItem.Click();

IList<IWebElement> outerTables_forEachLeague = new List<IWebElement>();

var wait = new WebDriverWait(driver, TimeSpan.FromSeconds(10));
outerTables_forEachLeague = wait.Until<IList<IWebElement>>((d) =>
{
    var elements = d.FindElements(By.ClassName("boxVerde"));
    if (elements.Count == 0)
    {
        return null;
    }

    return elements;
});
于 2013-04-19T12:56:46.243 に答える