C# 如果WebElement仍然没有加载,如何在没有睡眠的情况下写入延迟?
我为web应用程序编写自动测试,但我遇到了延迟问题。我不想在脚本中使用睡眠,所以我写了下一个:C# 如果WebElement仍然没有加载,如何在没有睡眠的情况下写入延迟?,c#,selenium,selenium-webdriver,C#,Selenium,Selenium Webdriver,我为web应用程序编写自动测试,但我遇到了延迟问题。我不想在脚本中使用睡眠,所以我写了下一个: driver.FindElement(By.ClassName("MyClassName")).Displayed 如果它工作正常(也可以使用Enabled),但是我有几个视图在3-5秒内加载,所以我收到了NoSuchElementException,因为它试图查找元素,而元素仍然没有加载。 我知道这个问题可以通过增加简单的睡眠来解决,但我不想这样做 除了睡觉,还有别的解决办法吗
driver.FindElement(By.ClassName("MyClassName")).Displayed
如果它工作正常(也可以使用Enabled),但是我有几个视图在3-5秒内加载,所以我收到了NoSuchElementException,因为它试图查找元素,而元素仍然没有加载。
我知道这个问题可以通过增加简单的睡眠来解决,但我不想这样做
除了睡觉,还有别的解决办法吗
提前谢谢 在C#中,我不确定,但在python中,我们有预期的条件,要等到下课
WebDriverWait(driver, 30).until(EC.element_to_be_clickable((By.XPATH,'//span[contains(text(),"Enter a gift card, voucher or promotional code")]'))).click()
上述命令将在抛出错误之前等待30秒,并每隔0.5秒检查上述元素是否可单击
检查EC(预期条件)并等待c#selenium模块中的API您可以尝试类似的方法。如果愿意,可以更改方法时间,甚至可以将其作为变量并向其传递值
call - WaitForElementDisplayed_byXPathTime("//a[@class='myClass");
public static void WaitForElementDisplayed_byXPathTime(string value)
{
try
{
var wait = new WebDriverWait(driver, new TimeSpan(0, 0, 30));
wait.Until(webDriver => webDriver.FindElement(By.XPath(value)).Displayed);
}
catch (Exception)
{
//add error handling;
throw;
}
}
}
将代码放入异步任务并执行
wait task.Delay(nnn)代码>我已经从这个问题和你的新问题的标题中删除了标签,因为它违反了本网站的标签准则(该准则规定,除非标签是句子的有机组成部分,否则你不应该在问题标题中放置标签)。仍然没有触及到例外,它不会出现,只是抛出一个例外。事实上,这就是问题所在。系统用元素加载页面需要花费时间。我们要花多少时间?如果您添加了sleep-in线程,它会工作吗?如果睡眠有效,你就知道你的元素是好的。您还可以尝试在同时加载的页面上查找其他元素。你在iframe中寻找的元素是偶然的吗?事实上,我猜我做错了什么。睡眠很好,我设置为10秒。它没有等待足够的时间,因此我接收或不接触元素或元素是不可单击的。