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

C# Selenium Loop When Element Is No Longer Active

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

文件完成时出现xpath //div[@class='media-upload-progress finished'] 或文件上传时出现//div[@class='media-upload-progress uploading']

我想我可以用一个 while 循环和一个 SeleniumDriver.IsElementPresent 来做一些事情,但我一直没弄明白。

有什么想法吗?

感谢您的帮助!

我建议您 DefaultWait 试一试。 PollingInterval 会真正帮助您,因为除非文件已完全上传,否则不会出现完成的元素。以下代码应在每个 100 ms 中轮询 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 );
});

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