如何在硒中每次点击执行3秒延迟?例如,我有这个代码,我希望有3秒延迟完全页面加载。它点击了分页中的按钮:
for( int i = 1; i<6; i++)
{
driver.FindElement(By.XPath(".//*[@id='injectview']/div/div/div/table[2]/tbody/tr/td[1]/ul/li["+ i +"]/a")).Click();
}
答案 0 :(得分:3)
请勿使用Thread.Sleep()
,因为这只会等待硬编码的时间值。如果页面没有在那时加载怎么办?如果页面加载速度超过3秒怎么办?更好的做法是使用WebDriverWait
等待页面完成加载。
WebDriverWait wait = new WebDriverWait(Driver, TimeSpan.FromSeconds(3));
for (int i = 1; i < 6; i++)
{
By locator = By.XPath(".//*[@id='injectview']/div/div/div/table[2]/tbody/tr/td[1]/ul/li[" + i + "]/a");
IWebElement element = Driver.FindElement(locator);
element.Click();
wait.Until(ExpectedConditions.StalenessOf(element));
wait.Until(ExpectedConditions.ElementToBeClickable(locator));
}
逻辑是这样的:
注意:使用多层嵌套,您的XPath将变得脆弱。如果您将在导航链接周围提供HTML,我可能会创建一个不太脆弱的定位器。
答案 1 :(得分:0)
您可以使用wait.until(...);
包装整个请求,它应该等待每次调用的完成。
答案 2 :(得分:-1)
我认为更清洁的解决方案是使用异步
for( int i = 1; i<6; i++)
{
await PutTaskDelay();
driver.FindElement(By.XPath(".//*[@id='injectview']/div/div/div/table[2]/tbody/tr/td[1]/ul/li["+ i +"]/a")).Click();
}
async Task PutTaskDelay()
{
await Task.Delay(3000);
}