2012-08-12 90 views
3

我有以下情形:Selenium Webdriver c#无需等待页面加载

我想导航到页面。然后点击一个按钮,一出现(不等待页面加载)。我不想等待最初的页面加载,因为它需要很长时间。我的程序目前被卡住,直到页面加载,然后单击按钮。

我基本上想导航到链接,然后不必等待页面并继续我的代码。

无论如何围绕此?

回答

0

简短的回答:第

龙回答:硒是默认试图模拟真实用户 - 我知道这有点很烂,特别是在你需要测试一个部署部署后部署后次...

但如果真正的用户必须等待按钮出现,则该程序必须做到这一点也...

顺便说一句:如果真的按钮最早出现在页面上,你可以试试这个:

  1. 搜索通过ID,XPath的...顺便按钮你做
  2. 捕获异常(我的Java的家伙,所以不要问我怎么了)
  3. 如果有错误,等待时间短(例如200毫秒),然后转到1
  4. 如果不是,点击按钮
  5. 的周期是否一定的时间量经过(10S也应该结束),并且如果是这样,抛出异常

如上所述:我选择的语言是Java。我可以做到这一点。但我不知道如何写在C#

2
IWebDriver driver = new FirefoxDriver(); 
driver.Url = "http://somedomain/url_that_delays_loading"; 
WebDriverWait wait = new WebDriverWait(driver, TimeSpan.FromSeconds(10)); 
IWebElement myDynamicElement = wait.Until<IWebElement>((d) => 
{ 
    return d.FindElement(By.Id("someDynamicElement")); 
}); 

它确实是你想要的。它查询页面以查找元素,如果找不到元素则捕获异常,并在找到时返回元素。

之后,你可以操纵按钮忽略一个事实,即页面可以不加载

http://seleniumhq.org/docs/04_webdriver_advanced.html

3

随着.NET绑定的最新版本,您可以设置页面加载超时。但是,您需要注意一些注意事项。首先,这并未被所有浏览器实现。它应该适用于IE和Firefox,如果内存服务。其次,你需要捕捉一个异常来使其正常工作,但是可以完成。

// WARNING! Completely untested code written without 
// the benefit of an IDE! 
IWebDriver driver = new InternetExplorerDriver(); 
driver.Manage().Timeouts().SetPageLoadTimeout(TimeSpan.FromSeconds(1)); 

try 
{ 
    driver.Url = "http://your.long.loading.page.com"; 
} 
catch (TimeoutException) 
{ 
    // NOTE: In 2.26 or later, this will be WebDriverTimeoutException 
} 

WebDriverWait wait = new WebDriverWait(driver, TimeSpan.FromSeconds(10)); 
IWebElement element = wait.Until<IWebElement>((d) => 
{ 
    return d.FindElement(By.Id("yourId")); 
}