WebDriverWait 不适用于 DialogFragment - C#、Appium
本文关键字:Appium DialogFragment 不适用 适用于 WebDriverWait | 更新日期: 2023-09-27 18:36:25
我正在使用Appium .NET驱动程序为一个Android应用程序编写一些自动测试。
我需要添加一个等待来找到一个元素,因为它需要一些时间来加载。
如果我使用Thread.Sleep
它工作正常,但它令人讨厌的方式,所以想与WebDriverWait
一起检查,但使用 WebDriverWait
测试失败并且无法找到元素。
工作代码:
[TestMethod]
public void TestMethod1()
{
Thread.Sleep(TimeSpan.FromSeconds(10));
IWebElement obj = driver.FindElementByXPath("//android.widget.Button[@text='Get Started']");
obj.Click();
}
不工作:
[TestMethod]
public void TestMethod1()
{
var obj = driver.FindElement(By.XPath("//android.widget.Button[@text='Get Started']"), 15);
obj.Click();
}
FindElement
是Loudenvier在这里编写的扩展方法
日志:这是我来自线程睡眠和网络驱动程序等待方法的 Appium 日志。感谢您的帮助。
Edit1:我试图找到的按钮元素是Android DialogFragment的一部分。当用户第一次打开应用程序时,会出现此对话片段,这是一种欢迎屏幕。
我注意到WebDriverWait
实际上在主应用程序片段中等待并尝试搜索元素并失败。但是Thread.Sleep
有效,因为在这种情况下,DialogFragment
加载到主应用程序片段的顶部,然后 Web 驱动程序在正确的片段中搜索元素。我尝试了ImplicitlyWait
和explicitwait
但结果是一样的。
有没有更好的方法来等待对话片段?
为什么不使用explicit
等待并等待驱动程序找到元素?另外,查找元素机制在上面的代码中看起来不同。
[TestMethod]
public void TestMethod1()
{
By byXpath = By.XPath("//android.widget.Button[@text='Get Started']");
IWebElement webElement = new WebDriverWait(driver, TimeSpan.FromSeconds(10)).Until(d=>d.FindElement(byXpath));
webElement.Click();
}