web-dev-qa-db-ja.com

C#を使用してSelenium WebDriverで要素にスクロールする方法

Selenium WebDriverを特定の要素までスクロールして画面に表示するにはどうすればよいですか。私はさまざまなオプションを試しましたが、運がありませんでした。これはC#バインディングでは機能しませんか?

Ex((IJavaScriptExecutor)Driver).ExecuteScript("window.scrollTo(0, document.body.scrollHeight - 150)");_の特定の場所にジャンプさせることはできますが、毎回正確な場所を指定せずに別の要素に送信できるようにしたいと思います。

public IWebElement Example { get { return Driver.FindElement(By.Id("123456")); } }

例1)_((IJavaScriptExecutor)Driver).ExecuteScript("arguments[0].scrollIntoView(true);", Example);_

例2)_((IJavaScriptExecutor)Driver).ExecuteScript("window.scrollBy(Example.Location.X", "Example.Location.Y - 100)");_

私がそれを見るとき、それはページを要素にジャンプダウンせず、例外は画面外にある要素と一致します。

更新:bool ex = Example.Exists();を追加しましたその後、結果を確認しました。存在します(本当です)。表示されていません(要素に移動していないため、まだ画面外にあります)選択されていません??????

誰かがBy.ClassNameの成功を見ています。 c#バインディングでこのBy.Idを実行する際に問題があるかどうか誰もが知っていますか?

20
merrua

その少し古い質問ですが、私は上記で提案されているよりも良い解決策があると信じています。

ここに元の答えがあります: https://stackoverflow.com/a/26461431/1221512

要素へのスクロールを実行するには、Actionsクラスを使用する必要があります。

var element = driver.FindElement(By.id("element-id"));
Actions actions = new Actions(driver);
actions.MoveToElement(element);
actions.Perform();
41
DRAX

これは、Chrome、IE8およびIE11で動作します。

public void ScrollTo(int xPosition = 0, int yPosition = 0)
{
    var js = String.Format("window.scrollTo({0}, {1})", xPosition, yPosition);
    JavaScriptExecutor.ExecuteScript(js);
}

public IWebElement ScrollToView(By selector)
{
    var element = WebDriver.FindElement(selector);
    ScrollToView(element);
    return element;
}

public void ScrollToView(IWebElement element)
{
    if (element.Location.Y > 200)
    {
        ScrollTo(0, element.Location.Y - 100); // Make sure element is in the view but below the top navigation pane
    }

}
16
milanio

これは私のために働く:

var elem = driver.FindElement(By.ClassName("something"));
driver.ExecuteScript("arguments[0].scrollIntoView(true);", elem);
9
user3734429

ページ内を下にスクロールするには、小さなコードと解決策があります

私のシナリオは、ページをスクロールダウンするまででした。 [同意する]および[同意しない]ボタンが有効になっていませんでした。私は15の契約条件を持っていましたが、そこからウェブページを調べて最後の契約条件のIDを取得して、15番目の契約条件を選択する必要がありました。

driver.FindElement(By.Id("para15")).Click();

<div id="para15">One way Non-Disclosure Agreement</div>
0
query s

c#の自動化で私のために働く

 public Page scrollUp()
        {
            IWebElement s = driver.FindElement(By.Id("your_locator")); ;
            IJavaScriptExecutor je = (IJavaScriptExecutor)driver;
            je.ExecuteScript("arguments[0].scrollIntoView(false);", s);
            return this;
        }
0

IWebDriverの拡張機能を作成しました。

public static IWebElement GetElementAndScrollTo(this IWebDriver driver, By by)
{
    var js = (IJavaScriptExecutor)driver;
    try
    {
        var element = driver.FindElement(by);
        if (element.Location.Y > 200)
        {
            js.ExecuteScript($"window.scrollTo({0}, {element.Location.Y - 200 })");
        }
        return element;
    }
    catch (Exception ex)
    {
        return null;
    }
}