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 驱动程序在正确的片段中搜索元素。我尝试了ImplicitlyWaitexplicitwait但结果是一样的。

有没有更好的方法来等待对话片段?

WebDriverWait 不适用于 DialogFragment - C#、Appium

为什么不使用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();
}