Lỗi Selenium - Yêu cầu HTTP đến WebDriver từ xa đã hết thời gian chờ sau 60 giây


85

Tôi đã sử dụng Selenium trong một số tháng, mà chúng tôi đang sử dụng để tự động hóa một số quy trình thử nghiệm nội bộ của mình. Các kịch bản đã trôi qua tốt đẹp. Gần đây tôi đã nâng cấp lên trình duyệt web C # 2.40.0 bằng FF 27.01 và các tập lệnh của chúng tôi hiện đang bị lỗi ở những nơi ngẫu nhiên với lỗi sau.

[Portal.SmokeTest.SmokeRunTest.Booking] TearDown method failed. OpenQA.Selenium.WebDriverException : The HTTP request to the remote WebDriver server for URL htt(p)://localhost:7055/hub/session/56e99e88-ba17-4d12-bef1-c6a6367ccc2f/element timed out after 60 seconds.
  ----> System.Net.WebException : The operation has timed out
TearDown : OpenQA.Selenium.WebDriverException : The HTTP request to the remote WebDriver server for URL htt(p)://localhost:7055/hub/session/56e99e88-ba17-4d12-bef1-c6a6367ccc2f/window timed out after 60 seconds.
  ----> System.Net.WebException : The operation has timed out
[09:01:20]
[Portal.SmokeTest.SmokeRunTest.Booking] TearDown method failed. OpenQA.Selenium.WebDriverException : The HTTP request to the remote WebDriver server for URL htt(p)://localhost:7055/hub/session/56e99e88-ba17-4d12-bef1-c6a6367ccc2f/element timed out after 60 seconds.
  ----> System.Net.WebException : The operation has timed out
TearDown : OpenQA.Selenium.WebDriverException : The HTTP request to the remote WebDriver server for URL htt(p)://localhost:7055/hub/session/56e99e88-ba17-4d12-bef1-c6a6367ccc2f/window timed out after 60 seconds.
  ----> System.Net.WebException : The operation has timed out
   at OpenQA.Selenium.Support.UI.DefaultWait`1.PropagateExceptionIfNotIgnored(Exception e)
   at OpenQA.Selenium.Support.UI.DefaultWait`1.Until[TResult](Func`2 condition)
   at Portal.Test.Helpers.Process_Bookings.OpenBookings.SelectBooking(String bookingnumber)
   at Portal.SmokeTest.SmokeRunTest.Booking() in d:\TeamCityAgent\work\dac1dcea7f2e80df\SmokeTests\SmokeRunTest.cs:line 68
--WebException
   at System.Net.HttpWebRequest.GetResponse()
   at OpenQA.Selenium.Remote.HttpCommandExecutor.CreateResponse(WebRequest request)
--TearDown
   at OpenQA.Selenium.Remote.HttpCommandExecutor.CreateResponse(WebRequest request)
   at OpenQA.Selenium.Remote.HttpCommandExecutor.Execute(Command commandToExecute)
   at OpenQA.Selenium.Firefox.Internal.ExtensionConnection.Execute(Command commandToExecute)
   at OpenQA.Selenium.Remote.RemoteWebDriver.Execute(String driverCommandToExecute, Dictionary`2 parameters)
   at OpenQA.Selenium.Remote.RemoteWebDriver.Close()
   at Portal.Test.Helpers.Setup.CloseWebdriver()
   at Portal.SmokeTest.SmokeRunTest.TearDown() in d:\TeamCityAgent\work\dac1dcea7f2e80df\SmokeTests\SmokeRunTest.cs:line 162
--WebException
   at System.Net.HttpWebRequest.GetResponse()
   at OpenQA.Selenium.Remote.HttpCommandExecutor.CreateResponse(WebRequest request)

Lỗi mới nhất mà tôi đã quản lý để theo dõi một dòng mã duy nhất:

_setup.driver.FindElement(By.XPath("//button[@class='buttonSmall lockBookingButton']")).Click();

Điều khó chịu là, cố gắng khắc phục sự cố đang tỏ ra khó khăn, như thể tôi chạy thử nghiệm trên máy cục bộ của mình, khi gỡ lỗi, nó sẽ vượt qua. Ngoài ra, nếu tôi chạy nó qua trình chạy NUNIT trên máy xây dựng mà tôi đang chạy thử nghiệm, nó cũng vượt qua. Nó chỉ có vẻ không thành công trong quá trình chạy xây dựng tự động của chúng tôi khi sử dụng Teamcity. Như tôi đã nói, điều này đã hoạt động tốt trong nhiều tháng trước đó và thứ duy nhất đã thay đổi là bộ công cụ trình duyệt web selen.

Tôi đã gặp sự cố này trước đây, trong khi gỡ lỗi và khi một Click()dòng mã được gọi, Firefox dường như bị khóa và chỉ dừng thử nghiệm mới cho phép Firefox tiếp tục. Có một số đề xuất ở đây bao gồm sửa đổi nguồn webdriver? Tôi không muốn đi theo con đường đó nếu có thể nếu bất kỳ ai khác có thể đưa ra bất kỳ đề xuất nào.


Chúng tôi đã gặp chính xác vấn đề tương tự trong một số dự án độc lập sử dụng thiết lập này và vẫn chưa có giải pháp nào cho vấn đề này. Đặt cược tốt nhất của chúng tôi là hạ cấp xuống các phiên bản cũ hơn của hội đồng WebDriver và Firefox. Chúng tôi cũng không biết liệu hành vi này là do WebDriver hay Firefox gây ra.
Dio F

Câu trả lời:


23

Tôi đã gặp sự cố tương tự khi sử dụng trình điều khiển Chrome (v2.23) / chạy thử nghiệm thông qua TeamCity. Tôi đã có thể khắc phục sự cố bằng cách thêm cờ "không có hộp cát" vào các tùy chọn của Chrome:

var options = new ChromeOptions();
options.AddArgument("no-sandbox");

Tôi không chắc liệu có tùy chọn tương tự cho trình điều khiển FF hay không. Theo những gì tôi hiểu, vấn đề có liên quan đến TeamCity đang chạy Selenium trong tài khoản SYSTEM.


điều này cũng giải quyết vấn đề của tôi. Tôi đã không thể chạy các bài kiểm tra chrome nữa sau nhiều tháng không thử chúng. Cảm ơn combatc2
Etienne

1
Mã của tôi đang chạy tốt trong env được lưu trữ trên IIS và bị dừng đột ngột, nhưng vẫn hoạt động trong các thử nghiệm đơn vị của tôi. Thêm dòng này làm cho nó hoạt động trở lại trong IIS env. Cảm ơn!
Legends,

1
Tôi đã xóa nó là Đang var options = new ChromeOptions(); options.AddArgument("--no-sandbox");làm việc trong phiên bản C # Webdriver 3.14.
moto_geek,

20
new FirefoxDriver(new FirefoxBinary(),new FirefoxProfile(),TimeSpan.FromSeconds(180));

Khởi chạy trình duyệt của bạn bằng các dòng mã trên. Nó đã làm việc cho tôi.


Đã sửa cho chúng tôi. Khi chạy một tập lệnh cơ bản chỉ tạo trình điều khiển FF và không có gì khác, thời gian chờ 60 giây hoạt động 100% thời gian. Khi chạy tập lệnh nặng về tài nguyên của chúng tôi, tập lệnh này sẽ mở các kết nối đến cơ sở dữ liệu / đọc / ghi / làm nhiều việc khác ngay lập tức trước khi mở FF, thời gian chờ 60 sẽ gây ra lỗi ~ 50% thời gian. Tăng thời gian chờ lên 3 phút đã khắc phục được sự cố. Có vẻ như Webdriver chỉ cần thêm một chút thời gian để khởi động động cơ.
KayakinKoder

13

Tôi gặp sự cố này lần đầu tiên cách đây vài tháng (cũng trên click()lệnh) và nó đã là một vấn đề đối với tôi kể từ đó. Có vẻ như đây là một số vấn đề với các liên kết .NET Selenium. Bài đăng trên blog này của anh chàng làm việc trên trình điều khiển IE rất hữu ích trong việc giải thích những gì đang xảy ra:

http://jimevansmusic.blogspot.com/2012/11/net-bindings-whaddaymean-no-response.html

Thật không may, dường như không có một giải pháp thực sự cho vấn đề này. Bất cứ khi nào vấn đề này được đưa ra cho các nhà phát triển Selenium ( xem tại đây ), đây là một phản hồi điển hình :

Chúng tôi cần một kịch bản có thể tái tạo, phải bao gồm một trang mẫu hoặc một liên kết đến trang của một trang web công khai nơi vấn đề có thể được tái tạo.

Nếu bạn có thể gửi một trường hợp thử nghiệm có thể tái tạo nhất quán, điều đó có thể rất hữu ích trong việc khắc phục lỗi này cho tốt.

Điều đó nói rằng, có lẽ bạn có thể thử giải pháp này trong thời gian chờ đợi. Nếu nút HTML mà bạn đang cố gắng click()onclickthuộc tính chứa Javascript, hãy cân nhắc sử dụng JavascriptExecutor để thực thi trực tiếp mã đó, thay vì gọi click()lệnh. Tôi thấy rằng việc thực thi onclickJavascript trực tiếp cho phép một số bài kiểm tra của tôi vượt qua.


9

Gặp sự cố tương tự với Firefox. Tôi đã chuyển sang Chrome với các tùy chọn và tất cả đều ổn kể từ đó.

ChromeOptions options = new ChromeOptions();
 options.AddArgument("no-sandbox");

 ChromeDriver driver = new ChromeDriver(ChromeDriverService.CreateDefaultService(), options, TimeSpan.FromMinutes(3));
 driver.Manage().Timeouts().PageLoad.Add(System.TimeSpan.FromSeconds(30));

Tôi có thể nhầm lẫn ở đây, nhưng có vẻ như dòng cuối cùng sẽ không có hiệu lực. Bản thân PageLoad là một TimeSpan và .Add on TimeSpan là một hàm thuần túy, không sửa đổi PageLoad, nó chỉ trả về một TimeSpan mới đang bị loại bỏ.
Jason Ritchie

3

Trong trường hợp của tôi, loại nút của tôi submitkhông phải buttonvà tôi thay đổi Clickthành Sumbitsau đó mọi hoạt động tốt. Một cái gì đó như dưới đây,

từ driver.FindElement(By.Id("btnLogin")).Click();

đến driver.FindElement(By.Id("btnLogin")).Submit();

BTW, tôi đã thử tất cả các câu trả lời trong bài đăng này nhưng không hiệu quả với tôi.


3

Có vấn đề tương tự. Cố gắng đặt nhiều thời gian hơn trong trình tạo trình điều khiển - thêm vd.

var timespan = TimeSpan.FromMinutes(3);

var driver = new FirefoxDriver(binary, profile, timeSpan);

Xin chào bạn, đó sẽ là định dạng như dưới đây? driver.Manage (). Timeouts (). ImplicitWait (TimeSpan.FromSeconds (5));
Nathan

4
Không, không phải chờ đợi này ImplicitWait được kết nối với việc tìm kiếm các phần tử. Bạn cần thay đổi thời gian chờ trình điều khiển mặc định (60 giây), khi nó chờ yêu cầu được tiếp tục (nếu tôi không nhầm). Dù sao, bạn phải tìm một dòng nơi bạn đặt hàm tạo trình điều khiển FF và thêm vào đó nhiều thuộc tính hơn hoặc thay đổi thời gian chờ. Một cái gì đó như:driver = new FirefoxDriver(new FirefoxBinary(), new FirefoxProfile(path to your profile), TimeSpan.FromMinutes(3));
Bart Wojtala

2
cho ChromeDriver nó sẽ trông như thếdriver = new ChromeDriver(service, chromeDriverOptions, TimeSpan.FromMinutes(3));
redwards510

2

Tôi nghĩ rằng sự cố này xảy ra khi bạn cố gắng truy cập đối tượng trình điều khiển web của mình sau

1) một cửa sổ đã đóng và bạn vẫn chưa chuyển sang chế độ chính

2) bạn đã chuyển sang một cửa sổ chưa sẵn sàng và đã được cập nhật kể từ khi bạn chuyển

chờ đợi windowhandles.countđiều bạn mong đợi không tính đến nội dung trang cũng như tài liệu. Tôi vẫn đang tìm giải pháp cho vấn đề này


2

Trong trường hợp của tôi, đó là do tôi đã xóa thư mục cập nhật chrome. Sau khi cài đặt lại chrome, nó hoạt động tốt.


1

Vấn đề là việc đánh giá Click()thời gian chờ trên bản dựng của bạn .. bạn có thể muốn tìm hiểu kỹ những gì sẽ xảy ra Click().

Ngoài ra, hãy thử thêm Retrys Click()vì thường mất thời gian đánh giá lâu hơn tùy thuộc vào tốc độ mạng, v.v.


Xin chào, Tùy chọn thử lại sẽ không hoạt động vì trình duyệt vừa khóa. Chỉ dừng thử nghiệm mới cho phép trình duyệt tiếp tục.
Nathan

1

Trong trường hợp của tôi, tôi thấy lỗi này xảy ra trong máy chủ xây dựng nhóm của chúng tôi. Các bài kiểm tra đã hoạt động trên các máy dev cục bộ của chúng tôi.

Vấn đề là trang web mục tiêu không được định cấu hình chính xác trên máy chủ xây dựng, vì vậy nó không thể mở trình duyệt một cách chính xác.

Chúng tôi đã sử dụng trình điều khiển chrome nhưng tôi không chắc điều đó tạo ra sự khác biệt.


1

Trong trường hợp của tôi, sự cố là với SendKeys () và Remote Desktop . Đăng giải pháp thay thế mà tôi có cho đến nay:

Tôi đã có một bài kiểm tra Selenium sẽ không thành công khi chạy như một phần của công việc Jenkins trên một nút được lưu trữ trong vSphere và được quản lý thông qua RDP. Sau một số khắc phục sự cố, nó đã thành công nếu Remote Desktop được kết nối và lấy nét nhưng không thành công, ngoại trừ trường hợp Remote Desktop bị ngắt kết nối hoặc thậm chí bị thu nhỏ.

Để giải quyết vấn đề này, tôi đã đăng nhập qua vSphere Console thay vì RDP và sau đó ngay cả sau khi đóng vSphere, kiểm tra không bị lỗi nữa. Đây là một giải pháp thay thế nhưng tôi sẽ phải cẩn thận không bao giờ đăng nhập qua RDP và luôn chỉ quản trị thông qua vSphere Console.


0

tôi thay đổi Selenium.WebDriver.ChromeDriver từ 2.40.0 sang 2.27.0 là được


0

Các new FirefoxDriver(binary, profile, timeSpan)đã lỗi thời.

Bây giờ bạn có thể sử dụng new FirefoxDriver(FirefoxDriverService.CreateDefaultService(), FirefoxOptions options, TimeSpan commandTimeout)thay thế.

Cũng có một new FirefoxDriver(string geckoDriverDirectory, FirefoxOptions options, TimeSpan commandTimeout)và nó hoạt động. Nhưng nó không có giấy tờ và bạn cần chỉ định thủ công geckoDriverDirectoryngay cả khi nó đã ở trong Path.


0

Chúng tôi đã có cùng một vấn đề. Trong trường hợp của chúng tôi, trình duyệt đã bị chặn bởi một cửa sổ bật lên đăng nhập (xác thực Windows), vì vậy sẽ không quay lại sau 60 giây. Thêm quyền truy cập chính xác vào tài khoản Windows mà Chrome đang chạy đã giải quyết được sự cố.


0

Arrrgh! Đối mặt với điều này trên macOS ngày hôm nay và vấn đề đơn giản như - cửa sổ bật lên đề xuất cài đặt phiên bản Appium mới đang hiển thị trên máy chủ xây dựng CI từ xa.

Chỉ cần VNC'ing vào nó và nhấp vào " Cài đặt sau " là sửa nó.


0

Trong trường hợp của tôi, không có câu trả lời nào ở trên giải quyết được vấn đề của tôi hoàn toàn. Tôi đã kết thúc bằng cách sử dụng no-sandboxchế độ ( ), kết nối với khoảng thời gian chờ kéo dài ( driver = new RemoteWebDriver(new Uri("http://localhost:4444/wd/hub"), capability, TimeSpan.FromMinutes(3));) và thời gian chờ tải trang ( driver.Manage().Timeouts().PageLoad.Add(System.TimeSpan.FromSeconds(30));), vì vậy bây giờ mã của tôi trông giống như sau:

    public IWebDriver GetRemoteChromeDriver(string downloadPath)
    {
        ChromeOptions chromeOptions = new ChromeOptions();
        chromeOptions.AddArguments(
            "start-maximized",
            "enable-automation",
            "--headless",
            "--no-sandbox", //this is the relevant other arguments came from solving other issues
            "--disable-infobars",
            "--disable-dev-shm-usage",
            "--disable-browser-side-navigation",
            "--disable-gpu",
            "--ignore-certificate-errors");
        capability = chromeOptions.ToCapabilities();

        SetRemoteWebDriver();
        SetImplicitlyWait();
        Thread.Sleep(TimeSpan.FromSeconds(2));
        return driver;
    }
    
    private void SetImplicitlyWait()
    {
        driver.Manage().Timeouts().PageLoad.Add(TimeSpan.FromSeconds(30));
    }


    private void SetRemoteWebDriver()
    {
        driver = new RemoteWebDriver(new Uri("http://localhost:4444/wd/hub"), capability, TimeSpan.FromMinutes(3));
    }

Nhưng như tôi đã đề cập không có phương pháp nào ở trên giải quyết được sự cố của tôi, tôi liên tục gặp lỗi và nhiều processses chromedriver.exe và chrome.exe đang hoạt động (~ 10 của chromedriver và ~ 50 của chrome).

Vì vậy, ở đâu đó tôi đọc được rằng sau khi loại bỏ trình điều khiển, tôi nên đợi một vài giây trước khi bắt đầu thử nghiệm tiếp theo, vì vậy tôi đã thêm dòng sau để loại bỏ phương pháp:

    driver?.Quit();
    driver?.Dispose();
    Thread.Sleep(3000);

Với sửa đổi chế độ ngủ này, tôi không còn gặp lỗi thời gian chờ và không có processses chromedriver.exe và chrome.exe được mở một cách không cần thiết.

Tôi hy vọng tôi đã giúp một người đang vật lộn với vấn đề này lâu như tôi đã làm.


0

Tôi đã gặp trường hợp ngoại lệ tương tự khi cố gắng chạy ChromeDriver không đầu với tác vụ đã lên lịch trên máy chủ windows (không giám sát). Những gì đã giải quyết nó cho tôi là chạy tác vụ với tư cách người dùng " Quản trị viên " (chú ý chữ S ở cuối). Những gì tôi cũng đã làm (tôi không biết liệu nó có liên quan hay không) là chọn "Bất kỳ kết nối nào" từ tab "Điều kiện" của nhiệm vụ.


-1

Đối với ChromDriver, điều bên dưới phù hợp với tôi:

string chromeDriverDirectory = "C:\\temp\\2.37";
 var options = new ChromeOptions();
 options.AddArgument("-no-sandbox");
 driver = new ChromeDriver(chromeDriverDirectory, options, 
 TimeSpan.FromMinutes(2));

Phiên bản Selenium 3.11, ChromeDriver 2.37

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.