元素不再活动时的 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 );
});
免责声明:我从未亲自实施过。所以这段代码完全没有经过我这边的测试。但是,理论上这应该可以解决您遇到的问题
我有一个正在上传文件的测试用例,我猜我需要一个 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 );
});
免责声明:我从未亲自实施过。所以这段代码完全没有经过我这边的测试。但是,理论上这应该可以解决您遇到的问题