2016-02-23 3 views
0

Я пытаюсь загрузить веб-страницу с помощью Selenium WebDriver (драйвера Firefox). Поскольку страница загружается динамически с помощью javascript, мой код выполняет некоторый javascript после начальной загрузки страницы для загрузки содержимого. Проблема в том, что WebDriver отключается через несколько минут, и мне нужно как минимум 10 минут, чтобы загрузить весь контент. Есть ли способ сделать это?ASP.NET MVC-Selenium Webdriver сбрасывает время на сервере Appharbor

Это мой код:

string firefoxBinaryPath = HttpContext.Current.Server.MapPath("~/lib/mozilla firefox/firefox.exe"); 
     FirefoxBinary binary = new FirefoxBinary(firefoxBinaryPath); 
     IWebDriver driver = new FirefoxDriver(binary, null, TimeSpan.FromMinutes(3)); 

     driver.Navigate().GoToUrl(url); 
     List<IWebElement> listOfDomElements = new List<IWebElement>(); 

     Thread.Sleep(5000); 

     do 
     { 
      for (int second = 0; ; second++) 
      { 
       if (second >= 12) 
       { 
        break; 
       } 
       ((IJavaScriptExecutor)driver).ExecuteScript("window.scrollBy(0,750)", "");//this is where it's timing out (line 103) 
       Thread.Sleep(1000); 
      } 
     ...additional lines 
     ...additional lines 

Это StackTrace и ошибки я получаю:

Источник: WebDriver;
Сообщение: HTTP-запрос на удаленный сервер WebDriver для URL http://localhost:7058/hub/session/7c64141c-1792-4175-a5f6-5304d911b4da/execute истекает через 180 секунд .;
StackTrace: в OpenQA.Selenium.Remote.HttpCommandExecutor.CreateResponse (WebRequest запрос) в OpenQA.Selenium.Remote.HttpCommandExecutor.Execute (Command commandToExecute) в OpenQA.Selenium.Firefox.FirefoxDriverCommandExecutor.Execute (Command commandToExecute) в OpenQA.Selenium.Remote.RemoteWebDriver.Execute (параметры String driverCommandToExecute, Dictionary`2) в OpenQA.Selenium.Remote.RemoteWebDriver.ExecuteScriptCommand (скрипт String, имя_инструмента, объект [] args) at OpenQA.Selenium.Remote.RemoteWebDriver .ExecuteScript (String script, Object [] args) at Amazon_Top_Products_Comparer.ParseMainStaplesDeals.ParseDom (String url) в d: \ temp \ npe0b3yh.ixi \ input \ Amazon Top Products Comparer \ ParseMainStaplesDeals.cs: строка 103 в Amazon_Top_Products_Comparer.Controllers.HomeController.List (строка категории) в D: \ Temp \ npe0b3yh.ixi \ вход \ Amazon Лучшие продукты Comparer \ Контроллеры \ HomeController.cs: линия 84

ответ

0

Я обычно не используют сон.

Попробуйте использовать

this.Find.Element(By.XPath("Xpath to any element that loads at the end")); 

или

this.WaitUntil(ExpectedConditions.ElementToBeClickable(By.Id("Id of element that loads at the end"))); 

Я использую вышеуказанные коды в моей странице объекта. Эти строки достаточны для обеспечения требуемого ожидания того, что определенный элемент будет доступен. Не уверен, ждет ли он 10 минут. Попробуйте

+0

Проблема в том, что я загружаю страницу, на которой у меня нет способа узнать, сколько элементов есть. Мне нужно нажать «Загрузить больше элементов», пока кнопка не будет отключена. – spooky123

+0

Можно ли одновременно нажать эту кнопку? что-то вроде бесконечного свитка ??? – hari6

+0

Он имеет тот же идентификатор – spooky123

Смежные вопросы