2012-05-15 68 views
23

Tôi đang sử dụng Selenium 2.20 WebDriver để tạo và quản lý trình duyệt firefox với C#. Để truy cập vào một trang, tôi sử dụng đoạn mã sau, thiết lập timeout tài xế trước khi quý khách đến thăm URL:Selenium WebDriver - Cách đặt Thời gian chờ tải trang bằng C#

driver.Manage().Timeouts().ImplicitlyWait(TimeSpan.FromSeconds(5)); // Set implicit wait timeouts to 5 secs 
driver.Manage().Timeouts().SetScriptTimeout(new TimeSpan(0, 0, 0, 5)); // Set script timeouts to 5 secs 
driver.Navigate().GoToUrl(myUrl); // Goto page url 

Vấn đề là đôi khi trang load quá chậm, và có vẻ như thời gian chờ mặc định cho một trang để tải sử dụng selenium WebDriver là 30 giây, quá dài. Và tôi không tin rằng thời gian chờ tôi đang thiết lập áp dụng cho việc tải một trang bằng cách sử dụng phương thức GoToUrl().

Vì vậy, tôi đang cố gắng tìm ra cách đặt thời gian chờ để tải trang, tuy nhiên, tôi không thể tìm thấy bất kỳ thuộc tính hoặc phương pháp nào thực sự hoạt động. Thời gian chờ 30 giây mặc định cũng có vẻ áp dụng khi tôi nhấp vào một phần tử.

Có cách nào để đặt thời gian chờ tải trang thành một giá trị cụ thể để khi tôi gọi phương thức GoToUrl(), nó sẽ chỉ chờ thời gian đã chỉ định của tôi trước khi tiếp tục?

+0

Bạn có chắc 'GoToUrl()' đang đợi trang tải không? Kinh nghiệm của tôi là nó không. Nhưng đó chỉ là một cảm giác, không phải là một thực tế. –

+0

có, tôi chắc chắn 100% gọi GoToUrl() chặn thực thi cho đến khi trang hoàn tất tải và tôi đã đo thời gian chờ mặc định là 30 giây để gọi phương thức này, sau 30 giây thực thi sẽ tiếp tục và tôi đang thử để giảm thời gian chờ mặc định là 30 giây bằng cách nào đó. – KabanaSoft

+0

tôi đã đăng câu hỏi tương tự: http://stackoverflow.com/questions/11958701/what-is-the-best-approach-for-timeout-using-selenium-using-webdriver –

Trả lời

3

Với điều này, bạn sẽ có thể tuyên bố chờ một cách rõ ràng.

WebDriverWait wait = new WebDriverWait(browser, new TimeSpan(time in seconds)); 
wait.until(Your condition) 

bạn cũng có thể thay đổi thời gian chờ đợi ngầm

driver.Manage().Timeouts().ImplicitlyWait(TimeSpan.FromSeconds(10)); 

Tôi nghĩ rằng đó là cú pháp trong C#. (Không chắc chắn)

Trong ruby ​​nó là

@driver.manage.timeouts.implicit_wait = 30 
@wait = Selenium::WebDriver::Wait.new(:timeout => 30) 
+1

điều này sẽ không hoạt động vì thực thi bị chặn bởi phương thức GoToUrl(), vì vậy tôi không thể thực thi bất kỳ mã nào cho đến khi phương thức đó được thực hiện hoặc hết thời gian, mặc định có vẻ là 30 giây. Cảm ơn phản ứng mặc dù. – KabanaSoft

+2

vì vậy bạn cần phải thay đổi thời gian chờ ngầm của bạn - 'driver.Manage(). Timeouts(). ImplicitlyWait (TimeSpan.FromSeconds (5));' giảm 5 giây xuống mức bạn muốn bao nhiêu. Điều đó sẽ ảnh hưởng đến thời gian chờ đợi của bạn trên gotourl. – Amey

+1

bạn cũng có thể thử 'wait.until (driver.Navigate(). GoToUrl (myUrl)); // Goto page url' nơi bạn xác định rõ ràng thời gian chờ lệnh gotoURL được thực thi – Amey

0

timeouts Tải trang không được thực hiện trong các bindings NET được nêu ra. Hy vọng rằng họ sẽ sớm.

3

tôi đã tìm ra giải pháp cho vấn đề này. Khi tạo một FirefoxDriver mới, có quá tải trong hàm khởi tạo cho phép bạn chỉ định thời gian chờ lệnh là thời gian chờ tối đa cho mỗi lệnh và có vẻ như hoạt động khi gọi phương thức GoToUrl():

driver = new FirefoxDriver(new FirefoxBinary(), profile, new TimeSpan(0, 0, 0, timeoutSeconds)); 

liên kết đến tài liệu xây dựng của FirefoxDriver để tham chiếu: http://selenium.googlecode.com/svn/trunk/docs/api/dotnet/html/M_OpenQA_Selenium_Firefox_FirefoxDriver__ctor_2.htm

Hy vọng điều này sẽ giúp người khác gặp phải sự cố này.

+0

tôi đã đăng câu hỏi tương tự: http://stackoverflow.com/questions/11958701/what-is-the-best-approach-for-timeout-using-selenium-using-webdriver –

28

Trong trường hợp điều này giúp mọi người vẫn đang tìm kiếm câu trả lời cho điều này, API C# WebDriver hiện chứa phương pháp thích hợp.

driver.Manage().Timeouts().SetPageLoadTimeout(timespan) 
+3

Tôi chỉ muốn ai đó có mô tả rõ ràng về cách thời gian chờ tải trang khác với thời gian chờ ngầm định. Khi nào một trang tải chính xác nhưng một phần tử thì không? – JasonCoder

+7

Từ C# intellisense 'ImplicitlyWait' là lượng thời gian tìm kiếm một phần tử trên trang,' SetPageLoadTimeout' là lượng thời gian chờ URL tải, và 'SetScriptTimeout' là khoảng thời gian chờ JS không đồng bộ tải. – jpvantuyl

7
driver.Manage().Timeouts().PageLoad = TimeSpan.FromSeconds(5); 

Lưu ý: driver.Manage().Timeouts().SetPageLoadTimeout(TimeSpan.FromSeconds(5)) hiện đang bị phản đối.

Các vấn đề liên quan