簡體   English   中英

硒 C# 發送密鑰

[英]Selenium C# sendkey

你好 Stackoverflow 用戶!

在許多 Internet 站點上,有一些可滾動的 div 容器。 例如,在 facebook 上,如果您單擊任何活動並想知道誰參加了此活動。 你點擊按鈕,它會打開一個列表,你可以看到所有的人。 另一個例子,如果您訪問任何 Instagram 個人資料並點擊“關注者”。 然后它再次打開一個列表,您可以看到所有關注者。 這些列表可能很長,向下滾動所有列表的技巧是按鍵盤上的“空格”鍵。

我的問題:

1.) 我怎樣才能給 Selenium 命令,按下“空格”鍵 x 秒?

2.) 如何將這些列表(不是瀏覽器站點[僅 div 容器])自動滾動到底部?

我試過:

driver.FindElement(By.XPath("//div[contains(.,'followers')]")).SendKeys(Keys.Space);

我使用:

硒、C#、chromedriver

這個非常棘手......我充其量只能給出部分答案。

我能想到的最好的事情是一個循環來繼續發送空格鍵,因為 keyDown 命令僅適用於某些鍵(我從文檔中可以看出)。 由於鏈接的數量會不斷增加,直到您到達列表的末尾,這是一種確定您是否已到達底部而不依賴於實際 Y 位置的方法。

        bool atBottom = false;

        while (!atBottom)
        {
            var linkNumber = driver.FindElementsByClassName("_6e4x5").Count;

            driver.FindElementByClassName("_6e4x5").SendKeys(Keys.Space); 

            var newLinkNumber = driver.FindElementsByClassName("_6e4x5").Count;

            atBottom = newLinkNumber.Equals(linkNumber);
        }

但是我一生都無法讓網絡驅動程序專注於元素以發送密鑰。 我已經嘗試了多個類名和 xpath ......這幾乎就像 IG 不希望這個自動化。

您可能會發現這個Stack 問題很有幫助,因為直接調用 JavaScript 可能是一種很好的解決方法。

你有硒中的 LocationOnScreenOnceScrolledIntoView 。 你可以使用它來滾動你想要的 div 到視圖中:

        public static IWebElement FindElementOnPageScrolling(this IWebDriver driver, By element)
    {
        RemoteWebElement remoteElement = (RemoteWebElement)driver.FindElement(element);
        var foo = remoteElement.LocationOnScreenOnceScrolledIntoView;
        return remoteElement;
    }

這通常在 chrome 和 firefox 中運行良好,在 IE 和 Edge 中它不會運行良好,至少在我的經驗中。

如果您還沒有嘗試過,您也可以嘗試發送 Key.Down 或 Key.End 向下滾動。

對於第一個嘗試使用ClickAndHold(IWebElement element)方法的 Actions 類的一部分。 對於第二個,您可以嘗試使用 JS 命令((IJavaScriptExecutor)driver).ExecuteScript("arguments[0].scrollIntoView();",element); 您需要找到列表中的最后一個元素並將其作為參數傳遞給 JS 函數。

KeyDown():該方法模擬需要按下特定鍵盤鍵時的鍵盤操作。

KeyUp():使用 KeyDown() 方法按下的鍵盤鍵不會自動釋放,因此使用 keyUp() 方法顯式釋放該鍵。

Actions action = new Actions(driver);
action.KeyDown(Keys.Space);
System.Threading.Thread.Sleep(1000); // trying to press space for X= 1000 ms 
action.KeyUp(Keys.Space);
action.Build().Perform();

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM