我目前正在使用WinAppDriver将针对UWP应用的编码UI测试迁移到Appium,并且遇到了这个问题,我迫不及待想要显示一个元素。没有办法像Microsoft的编码UI测试那样等待元素“就绪”。
在ClassInitialize
方法中,一切正常(在登录视图中输入数据),然后单击登录按钮。触发click事件后,应用程序会显示一个进度条,直到用户登录为止。我的问题是,登录过程结束后我无法等待组件。
我发现了一些代码片段,但是它们似乎对我不起作用。这是我当前使用的扩展方法:
public static IWebElement WaitForElement(this IWebDriver driver, By by, int timeoutInSeconds)
{
if (timeoutInSeconds > 0){
driver.Manage().Timeouts().ImplicitWait = TimeSpan.FromSeconds(timeoutInSeconds);
var wait = new WebDriverWait(driver, TimeSpan.FromSeconds(timeoutInSeconds));
return wait.Until(ExpectedConditions.ElementIsVisible(by));
}
return driver.FindElement(by);
}
我还读到必须为Windows驱动程序设置隐式超时:
session = new WindowsDriver<WindowsElement>(new Uri(WindowsApplicationDriverUrl), appCapabilities);
session.Manage().Timeouts().ImplicitWait = TimeSpan.FromSeconds(60);
,并在WaitForElement
方法中覆盖了该方法,这对我也不起作用。
Waiting for element before clicking with WinAppDriver
[TestMethod]
public void UploadDocuments()
{
var UploadButton = session.WaitForElement(By.XPath("//Button[@AutomationId='AddDocument']"), 60);
UploadButton.Click();
session.FindElementByXPath("//ToolbarWindow32[@AutomationId='1001']").SendKeys(Keys.Control + "a");
session.FindElementByXPath("//ToolbarWindow32[@AutomationId='1001']").SendKeys(testFilesFolder);
//session.FindElementByName("Open").Click();
}
在完成ClassInitialize
后,测试通常会在第一行崩溃。因此,我想等待“ AddDocument”按钮弹出,然后再进行测试。
如果有人有解决方案,我将不胜感激。 谢谢!
答案 0 :(得分:1)
您可以像这样实现等待功能:
public WindowsElement GetElementByAutomationID(string automationId, int timeOut = 10000)
{
WindowsElement element = null;
var wait = new DefaultWait<WindowsDriver<WindowsElement>>(Driver)
{
Timeout = TimeSpan.FromMilliseconds(timeOut),
Message = $"Element with automationId \"{automationId}\" not found."
};
wait.IgnoreExceptionTypes(typeof(WebDriverException));
try
{
wait.Until(Driver =>
{
element = Driver.FindElementByAccessibilityId(automationId);
return element != null;
});
}
catch (WebDriverTimeoutException ex)
{
LogSearchError(ex, automationId);
Assert.Fail(ex.Message);
}
return element;
}
您的问题似乎是appium-dotnet驱动程序问题。 有关此问题,请参见github上的以下问题: https://github.com/Microsoft/WinAppDriver/issues/329