在超时结束前找不到元素
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 文章可以熟悉这个概念
我正在使用 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 文章可以熟悉这个概念