2016-01-07 5 views
0

Привет, я использую этот код, чтобы прокрутить страницу до тех пор, пока элемент не находится в DOM. Однако он не прокручивает страницу, он просто петли и петли. Является ли мой IJavaScriptExecutor неправильным?Прокрутка до тех пор, пока элемент не находится в DOM

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

Примечание: элемент не находится в dom, свиток вызывает элемент. –

ответ

1

Try прокручивать с 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 секунд для элемента к быть видимым.

+0

Единственное предостережение от использования действий (в данном случае) заключается в том, что ИТ является «родным событием браузера». Вы можете получить более быстрые/разные/лучшие результаты, используя вместо него JavascriptExecutor. – djangofan

1
  • Вы прокручиваете окно, чтобы вызвать загрузку дополнительного контента.
  • Вы хотите продолжить прокрутку окна, пока загруженный контент не будет загружен.

Необходимо дождитесь загрузки содержимого.

Ни в коем случае не ждите. Рассмотрим WebDriverWait

+0

правильный. Однако я не вижу, как webdriverwait будет полезен, цикл while должен быть достаточным? –

+0

Нет, не правильно. Вам, по крайней мере, нужно сделать паузу. – Ben

+0

Хорошо, я вставлю паузу. Однако мой Javascript не прокручивает страницу, вы знаете, почему? –

0

Чтобы выполнить прокрутку по элементу, вы должны использовать класс Actions.

WebElement element = driver.findElement(By.id("element-id")); 
Actions actions = new Actions(driver); 
actions.moveToElement(element); 
actions.perform(); 
Смежные вопросы