滚动直到元素在DOM中

时间:2016-01-07 11:43:09

标签: javascript c# selenium

您好,我使用此代码尝试滚动页面,直到元素在DOM中。然而,页面没有滚动,它只是循环和循环。我的IJavaScriptExecutor错了吗?

public static void ScrollUntilElementinDom(this IWebDriver driver, By by)
{
    bool isPresent = false;
    while (isPresent == false)
    {
        try
        {
            isPresent = driver.FindElement(by).Displayed;
        }
        catch (Exception)
        {

        }
        if (isPresent == true)
        {
            break;
        }
        else
        {
            ((IJavaScriptExecutor) driver).ExecuteScript("window.scrollBy(100,0);");

        }

    }

3 个答案:

答案 0 :(得分:2)

  • 您正在滚动窗口以触发加载更多内容。
  • 您希望继续滚动窗口,直到您搜索的内容已加载。

您需要等待内容加载

你还没有等待。考虑WebDriverWait

答案 1 :(得分:1)

尝试使用Actions

滚动
Actions action = new Actions(driver);
action.MoveToElement(driver.FindElement(by)).Build().Perform();

要查找元素是否显示,您可以使用显式等待

WebDriverWait wait = new WebDriverWait(driver, TimeSpan.FromSeconds(15));

try
{
    wait.Until(ExpectedConditions.ElementIsVisible(by));
    isPresent = true;
}
catch (Exception) { }

这将等待最多15秒钟,以便元素可见。

答案 2 :(得分:0)

您应该使用Actions类来执行滚动到元素。

WebElement element = driver.findElement(By.id("element-id"));
Actions actions = new Actions(driver);
actions.moveToElement(element);
actions.perform();