在超时结束前找不到元素

Cannot find element before timeout ends

我正在使用 appium、C# 创建简单的测试自动化项目。它的打开应用程序正确,之后代码无法点击该元素。并显示异常 "OpenQA.Selenium.WebDriverException: 'The HTTP request to the remote WebDriver server for URL http://127.0.0.1:4723/wd/hub/session/34e0ca2f-af1f-48ef-aafe-d6a46516a862/element timed out after 60 seconds.'"

Image of the exception

我试过更改 xpath 和驱动程序类型

using System;
using Microsoft.VisualStudio.TestTools.UnitTesting;
using OpenQA.Selenium.Appium;
using OpenQA.Selenium;
using OpenQA.Selenium.Remote;
using OpenQA.Selenium.Appium.Android;
using OpenQA.Selenium.Appium.Interfaces;
using System.Threading;
using System.IO;

namespace FlowLogic_Test_Project
{
    [TestClass]
    public class UnitTest1
    {
        AppiumDriver<IWebElement> driver;

        [TestMethod]
        public void TestMethod1()
        {
            DesiredCapabilities capabilities = new DesiredCapabilities();
            capabilities.SetCapability("deviceName", "emulator-5554");
            capabilities.SetCapability("appActivity", ".MainActivity");
            capabilities.SetCapability("appPackage", "com.flowlogicclient");
            capabilities.SetCapability("automationName", "UiAutomator1");

            //Launch the Android driver
            driver = new AndroidDriver<IWebElement>(new Uri("http://127.0.0.1:4723/wd/hub"), capabilities);

            Thread.Sleep(10000);
            driver.FindElementByXPath("/hierarchy/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.FrameLayout/android.widget.FrameLayout/android.view.ViewGroup/android.view.ViewGroup[2]/android.view.ViewGroup/android.view.ViewGroup[2]/android.view.ViewGroup").Click();
        }
    }
}

您确定要这样做吗UiAutomator1 capability? If your emulator is running Android 5.1 API level 22 or higher you must use UIAutomator2 否则您将无法继续启动应用程序。

您还可以重新考虑 locator strategy,因为在 Android 上定位元素的首选方法是使用 resource-id。或者至少您可以使用相对 XPath,不是从 <hierarchy> 标记开始,而是使用它的标记值或文本来唯一标识您的元素。

以后避免使用 Thread.sleep,因为它是某种形式的性能反模式,有 WebDriverWait class along with DotNetSeleniumExtras.WaitHelpers providing APIs to wait for elements presence/visibility/clickability/absence/etc. Check out How to use Selenium to test web applications using AJAX technology 文章可以熟悉这个概念