Hello Stackoverflow用户!
在许多互联网网站上,都有一些可滚动的div容器。例如,在Facebook上,如果您点击任何活动,并想知道谁参加此活动。您单击按钮,它会打开一个列表,您可以看到所有人。 另一个例子,如果您访问任何Instagram个人资料并点击“关注者”。然后它再次打开一个列表,您可以看到所有关注者。这些列表可能非常长,并且按下键盘上的“空格”键可以向下滚动所有列表。
我的问题:
1。)如何给Selenium命令,按“空格”键x秒?
或
2.。)如何将这些列表(不是浏览器网站[仅限div容器])自动滚动到底部?
我试过了:
driver.FindElement(By.XPath("//div[contains(.,'followers')]")).SendKeys(Keys.Space);
我用:
Selenium,C#,chromedriver
答案 0 :(得分:0)
这个非常棘手......我最多只能得到部分答案。
我能想到的最好的事情就是循环继续发送空格键,因为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 question helpful,因为直接调用JavaScript可能会很好地为您提供解决方法。
答案 1 :(得分:0)
你在selenium中有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向下滚动。
答案 2 :(得分:0)
首先,请尝试使用ClickAndHold(IWebElement element)
方法作为Actions类的一部分。对于第二个,您可以尝试使用JS命令((IJavaScriptExecutor)driver).ExecuteScript("arguments[0].scrollIntoView();",element);
。您将需要找到列表中的最后一个元素,并将其作为参数传递给JS函数。
答案 3 :(得分:0)
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();