C# selenium c中单击的延迟#
如何为selenium中的每次单击执行3秒延迟?例如,我有这个代码,我想有3秒的延迟页面加载完全。单击分页中的按钮:C# selenium c中单击的延迟#,c#,selenium,selenium-webdriver,C#,Selenium,Selenium Webdriver,如何为selenium中的每次单击执行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(); } for(int i=1;i您可以使用wait.until(…);来包装整个请
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();
}
for(int i=1;i您可以使用wait.until(…);
来包装整个请求,它应该等待每个调用的完成。我认为更干净的解决方案是使用异步
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);
}
for(int i=1;i不要使用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));
}
WebDriverWait wait=new-WebDriverWait(驱动程序,TimeSpan.FromSeconds(3));
对于(int i=1;i<6;i++)
{
By locator=By.XPath(“./*[@id='injectview']/div/div/table[2]/tbody/tr/td[1]/ul/li[“+i+”]/a”);
IWebElement元素=Driver.findelelement(定位器);
元素。单击();
等待.直到(元素的ExpectedConditions.Stalenness);
wait.Until(ExpectedConditions.elementtobelickable(locator));
}
逻辑是这样的:
单击分页链接
等待分页链接失效。失效意味着元素不再位于DOM中,这表示正在加载新页面
等待元素可单击,这表明新页面(可能)已完成加载
对每个链接重复1-3次
注意:由于嵌套层太多,您的XPath将变得脆弱。如果您在导航链接周围提供HTML,我可能会创建一个不那么脆弱的定位器。这与Thread.Sleep()
没有什么不同,这是一个糟糕的做法。您删除了Thread.Sleep()
但我认为你的答案不够具体,不够有用。“包装整个请求”是什么意思?你有OP的代码,拿着它,然后根据你的建议发布他应该使用的最终答案。