您好,我使用此代码尝试滚动页面,直到元素在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);");
}
}
答案 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();