我有以下情况:
我想导航到一个页面。然后在出现时立即单击按钮(不等待页面加载)。我不想等待初始页面加载,因为它需要很长时间。我的程序当前一直停滞,直到页面加载,然后单击按钮。
我基本上想要导航到链接,然后没有等待页面并继续我的代码。
无论如何围绕这个?
答案 0 :(得分: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"));
}
答案 1 :(得分: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"));
});
它完全符合您的要求。它查询页面以查找元素,如果没有找到元素则捕获异常并在找到时返回元素。
之后,您可以操纵按钮忽略无法加载页面的事实
答案 2 :(得分:0)
简短回答:不。
答案很长:默认情况下Selenium试图模拟真实用户 - 我知道它有点糟糕,特别是有时您需要在部署后部署后测试部署...
但是:如果真实用户必须等待按钮出现,那么程序也必须这样做......
顺便说一句:如果按钮确实出现在页面的第一位,你可以试试这个:
如上所述:我选择的语言是Java。我可以做到这一点。但我不知道如何用C#
写出来