延迟点击硒c#

时间:2017-03-26 22:36:19

标签: c# selenium selenium-webdriver

如何在硒中每次点击执行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();
}

3 个答案:

答案 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));
}

逻辑是这样的:

  1. 点击分页链接。
  2. 等待分页链接过时。 Stale意味着该元素不再位于DOM中,表示正在加载新页面。
  3. 等待元素可点击,表示新页面已(可能)已完成加载。
  4. 每个链接重复1-3次。
  5. 注意:使用多层嵌套,您的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);
        }