元素不再活动时的C#Selenium循环

元素不再活动时的C#Selenium循环,c#,selenium,xpath,C#,Selenium,Xpath,我有一个上传文件的测试用例,我猜我需要一个while循环来确定上传何时完成 文件完成时会出现一个xpath//div[@class='media-upload-progress finished'],文件上载时会出现一个//div[@class='media-upload-progress upload'] 我以为我可以用while循环和一个SeleniumDriverIsElementPresent来做点什么,但我一直没能弄明白 有什么想法吗 谢谢你的帮助 我建议您尝试一下DefaultWai

我有一个上传文件的测试用例,我猜我需要一个while循环来确定上传何时完成

文件完成时会出现一个
xpath
//div[@class='media-upload-progress finished']
,文件上载时会出现一个
//div[@class='media-upload-progress upload']

我以为我可以用while循环和一个
SeleniumDriver
IsElementPresent
来做点什么,但我一直没能弄明白

有什么想法吗


谢谢你的帮助

我建议您尝试一下
DefaultWait
PollingInterval
确实会对您有所帮助,因为除非文件完全上传,否则完成的元素不会出现。以下代码应每隔
100毫秒轮询
dom
,并查找所需元素

By bySelector = By.XPath("//div[@class='media-upload-progress finished']");
DefaultWait<IWebDriver> wait = new DefaultWait<IWebDriver>(driver);
wait.Timeout = TimeSpan.FromSeconds(1); // increase the timeout as needed
wait.PollingInterval = TimeSpan.FromMilliseconds(100);
wait.IgnoreExceptionTypes(typeof(NoSuchElementException));
//Add more typrof() exceptions as needed
IWebElement element = wait.Until<IWebElement>((d) =>
{
    return d.FindElement(bySelector );
});
By bySelector=By.XPath(“//div[@class='media-upload-progress finished']”);
DefaultWait=新的DefaultWait(驱动程序);
wait.Timeout=TimeSpan.FromSeconds(1);//根据需要增加超时时间
wait.PollingInterval=TimeSpan.From毫秒(100);
wait.IgnoreExceptionTypes(typeof(NoSuchElementException));
//根据需要添加更多typrof()异常
IWebElement元素=等待直到((d)=>
{
返回d.FindElement(由选举人);
});

免责声明:我从未亲自实施过。所以这段代码完全没有经过我的测试。但是,从理论上讲,这应该可以解决您面临的问题

我想您在这里谈论的是两件不同的事情。当元素消失时,该元素是否仍在页面上(隐藏)或元素根本不存在?处理这些取决于每个场景的不同上载元素会更改为另一个元素,因此它会消失。是否有任何错误?或者您想知道处理此问题的最佳方法是什么?我想验证成功消息,但我需要知道上载何时完成。所以我觉得打个圈是最好的方法。谢谢你。我不得不将一行改为下面的,但这个解决方案效果很好。DefaultWait=新的DefaultWait(SeleniumDriver);很高兴听到这个消息。请接受这个答案,如果对你有帮助,请竖起大拇指