2013-09-02 67 views
6

Tôi đang sử dụng Selenium với C#.Selenium - Cuộn xuống một trang đang phát triển

Selenium thường có thể tự động cuộn xuống dưới cùng của trang web để tìm các phần tử nhưng tôi gặp sự cố với một trang nhất định có thể tăng kích thước.

Có ai có thể đề xuất mã sẽ cuộn xuống cuối trang khi kích thước đó tăng lên không?

+0

Làm tất cả các yếu tố tải khi tải trang hoặc tải một cách lười biếng giống như bài đăng trên facebook. Nếu vậy, bạn có thể nhận ra văn bản được hiển thị như 'Tải thêm bài đăng' hoặc một cái gì đó tương tự và sau đó tiếp tục tìm kiếm phần tử. Đó là một cách để làm điều đó. Trường hợp sử dụng của bạn ở đây là gì? Bạn có nhận được văn bản có nội dung tương tự không. – Madusudanan

+0

Có một số tiêu đề khác nhau trên trang hiển thị thêm chi tiết khi được nhấp. Khi một cái gì đó trong tiêu đề được nhấp (sau khi tiêu đề đã được nhấp) tôi nhận được một lỗi thời gian chờ (mà tôi tin là do trình duyệt không cuộn xuống để tìm phần tử). – user2184530

+0

Ứng dụng có hoạt động theo cách thủ công hay không. Bạn có thể đăng HTML của mình tại đây hay không, phần có tiêu đề.Điều này sẽ rõ ràng hơn. – Madusudanan

Trả lời

8

Hãy thử sử dụng javascript như mô tả trong this question

IJavaScriptExecutor js = (IJavaScriptExecutor)driver; 
js.ExecuteScript("window.scrollTo(0, document.body.scrollHeight);"); 
0

Am xin lỗi tôi không làm việc với C# nhưng đoán logic sẽ vẫn như cũ cho ngôn ngữ bất kỳ. Nếu nó là một tải lười biếng của trang thì bạn có thể sử dụng lớp Actions để thực hiện gửi tùy chọn khóa pagedown. Nếu bạn nhận được tin nhắn như nhiều mục hơn để tải hoặc không có thêm mục nào thì bạn có thể xác định phần tử này. Đặt tùy chọn trang xuống bên trong một vòng lặp trong khi thực hiện trang xuống cho đến khi điều kiện được thỏa mãn. Bằng cách này, bạn hoàn toàn có thể tải tất cả nội dung của trang. Hãy cho tôi biết nếu bạn cần thêm trợ giúp.

0

Một ví dụ trong C# sử dụng Net 4.5 và Selenium WebDriver 2,45

Chỉ cần thay đổi biến _url để trỏ đến trang web của bạn và chạy.

Tôi đã sử dụng ChromeDriver nhưng cũng nên hoạt động với các trình điều khiển khác.

using System; 
using OpenQA.Selenium; 
using OpenQA.Selenium.Chrome; 

namespace SeleniumScrollTest { 

    internal static class Program { 

     // Declare Selenium Web Driver 
     private static IWebDriver _chromeDriver; 

     private static String _url; 

     private static void Main(string[] args) { 
      // Instantiate URL 
      _url = @"http://my.website.com/LazyLoadContent"; 

      // Instantiate Web Driver as ChromeDriver and set initial URL 
      _chromeDriver = new ChromeDriver {Url = _url}; 

      // Instruct the WebDriver to wait X seconds for elements to load 
      _chromeDriver.Manage().Timeouts().ImplicitlyWait(TimeSpan.FromSeconds(15)); 

      // Instantiate JavaScript Executor using the web driver 
      var jse = (IJavaScriptExecutor) _chromeDriver; 

      // The minified JavaScript to execute 
      const string script = 
       "var timeId=setInterval(function(){window.scrollY<document.body.scrollHeight-window.screen.availHeight?window.scrollTo(0,document.body.scrollHeight):(clearInterval(timeId),window.scrollTo(0,0))},500);"; 

      // Start Scrolling 
      jse.ExecuteScript(script); 

      // Wait for user input 
      Console.ReadKey(); 

      // Close the browser instance 
      _chromeDriver.Close(); 

      // Close the ChromeDriver Server 
      _chromeDriver.Quit(); 
     } 
    } 
} 

Nếu bạn đã hiểu rõ về Selenium và C#, bit quan trọng thực sự là JavaScript. -Sourced từ Cybermaxs, here

var timeId = setInterval(function() { 
     if (window.scrollY !== document.body.scrollHeight) 
      window.scrollTo(0, document.body.scrollHeight); 
     else 
      clearInterval(timeId); 
    }, 500); 

500 trên là khoảng thời gian mà nó sẽ cố gắng cuộn (ms), điều chỉnh này là cần thiết. [1000 micro giây = 1 giây]

0

Tôi biết nó cũ kỹ, nhưng nó có thể là sự giúp đỡ của ai đó. Tôi đã xuất hiện với mã C# sau:

private void ScrollToBottom(IWebDriver driver) 
    { 
     long scrollHeight = 0; 

     do 
     { 
      IJavaScriptExecutor js = (IJavaScriptExecutor) driver; 
      var newScrollHeight = (long) js.ExecuteScript("window.scrollTo(0, document.body.scrollHeight); return document.body.scrollHeight;"); 

      if(newScrollHeight == scrollHeight) 
      { 
       break; 
      } 
      else 
      { 
       scrollHeight = newScrollHeight; 
       Thread.Sleep(400); 
      } 
     } while (true); 
    } 
Các vấn đề liên quan