我有以下情形:Selenium Webdriver c#无需等待页面加载
我想导航到页面。然后点击一个按钮,一出现(不等待页面加载)。我不想等待最初的页面加载,因为它需要很长时间。我的程序目前被卡住,直到页面加载,然后单击按钮。
我基本上想导航到链接,然后不必等待页面并继续我的代码。
无论如何围绕此?
我有以下情形:Selenium Webdriver c#无需等待页面加载
我想导航到页面。然后点击一个按钮,一出现(不等待页面加载)。我不想等待最初的页面加载,因为它需要很长时间。我的程序目前被卡住,直到页面加载,然后单击按钮。
我基本上想导航到链接,然后不必等待页面并继续我的代码。
无论如何围绕此?
简短的回答:第
龙回答:硒是默认试图模拟真实用户 - 我知道这有点很烂,特别是在你需要测试一个部署部署后部署后次...
但如果真正的用户必须等待按钮出现,则该程序必须做到这一点也...
顺便说一句:如果真的按钮最早出现在页面上,你可以试试这个:
如上所述:我选择的语言是Java。我可以做到这一点。但我不知道如何写在C#
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"));
});
它确实是你想要的。它查询页面以查找元素,如果找不到元素则捕获异常,并在找到时返回元素。
之后,你可以操纵按钮忽略一个事实,即页面可以不加载
随着.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"));
}