使用 Appium 和 C# 无法在 Android 模拟器的浏览器中找到元素
Unable to find an element in Browser of the Android emulator using Appium and C#
我想使用 c# 和 Appium 在 Android 模拟器上自动测试移动网站。我想首先自动化一个简单的测试场景:
1. 启动浏览器
2.找一个元素
3.清除它
4.发送密钥
第二步有问题。每次 MSTest 尝试执行下面代码中的 FindElementById 行时,我都会收到错误消息:
"An element could not be located on the page using the given search parameters."
[TestClass]
public class UnitTest1
{
private DesiredCapabilities _capabilities;
private AndroidDriver _driver;
public void InitializeDriver()
{
Console.WriteLine("Connecting to Appium server");
_capabilities = new DesiredCapabilities();
_capabilities.SetCapability("deviceName", "test_02");
_capabilities.SetCapability(CapabilityType.BrowserName, "Chrome");
_capabilities.SetCapability(CapabilityType.Version, "5.0.1");
_capabilities.SetCapability(CapabilityType.Platform, "Android");
//Application path and configurations
_driver = new AndroidDriver(new Uri("http://127.0.0.1:4723/wd/hub"), _capabilities);
}
[TestMethod]
public void TestMethod1()
{
InitializeDriver();
var element = _driver.FindElementById("com.android.browser:id/url");
element.Clear();
element.SendKeys(@"http://whosebug.com/");
}
}
我从 UIAutomator 获得的方法的输入字符串如下所示。
我尝试了 FindElementById 输入法的几种组合:
"com.android.browser:id/url"
"id/url"
"url"
但运气不好。
我的环境:
Windows8.1
Appium 1.3.4.1
Chrome 驱动程序 2.14.313457
Android 设备监视器 24.0.2
更新!以下方法不适用于网络测试:
您能否尝试使用 xpath 查找元素?
@FindBy(xpath="//android.widget.EditText[contains(@resource-id, 'url')]")
因此,对于您的情况,您可以尝试以下操作:
var element = _driver.findElementByXPath("//android.widget.EditText[contains(@resource-id, 'url')]");
更新:在测试网络应用程序(非本机)的情况下,您应该使用网页定位器而不是 Android 类。
试试这 2 个语句:
var element = _driver.FindElement(By.Id("com.android.browser:id/url");
driver.findElementsByXPath("//*[@class='com.android.browser' and @index='1']");
抱歉造成误导!!!
如果在浏览器中测试网络应用程序,元素应该像网页上的通常元素一样定位(而不是像 android.widget.EditText 和 android.widget.Button 那样的 类)。因此,例如尝试以下操作,您将看到一些结果:
var element = _driver
.findElementByXPath("//input[@id='lst-ib']");
要获取定位器,您应该 运行 桌面上的浏览器,打开页面并使用一些 tools/extensions,例如 Firefox 中的 Firebug 或 [=] 中的 Firebug Lite 20=] 浏览器.
我想使用 c# 和 Appium 在 Android 模拟器上自动测试移动网站。我想首先自动化一个简单的测试场景:
1. 启动浏览器
2.找一个元素
3.清除它
4.发送密钥
第二步有问题。每次 MSTest 尝试执行下面代码中的 FindElementById 行时,我都会收到错误消息: "An element could not be located on the page using the given search parameters."
[TestClass]
public class UnitTest1
{
private DesiredCapabilities _capabilities;
private AndroidDriver _driver;
public void InitializeDriver()
{
Console.WriteLine("Connecting to Appium server");
_capabilities = new DesiredCapabilities();
_capabilities.SetCapability("deviceName", "test_02");
_capabilities.SetCapability(CapabilityType.BrowserName, "Chrome");
_capabilities.SetCapability(CapabilityType.Version, "5.0.1");
_capabilities.SetCapability(CapabilityType.Platform, "Android");
//Application path and configurations
_driver = new AndroidDriver(new Uri("http://127.0.0.1:4723/wd/hub"), _capabilities);
}
[TestMethod]
public void TestMethod1()
{
InitializeDriver();
var element = _driver.FindElementById("com.android.browser:id/url");
element.Clear();
element.SendKeys(@"http://whosebug.com/");
}
}
我从 UIAutomator 获得的方法的输入字符串如下所示。
我尝试了 FindElementById 输入法的几种组合:
"com.android.browser:id/url"
"id/url"
"url"
但运气不好。
我的环境:
Windows8.1
Appium 1.3.4.1
Chrome 驱动程序 2.14.313457
Android 设备监视器 24.0.2
更新!以下方法不适用于网络测试:
您能否尝试使用 xpath 查找元素?
@FindBy(xpath="//android.widget.EditText[contains(@resource-id, 'url')]")
因此,对于您的情况,您可以尝试以下操作:
var element = _driver.findElementByXPath("//android.widget.EditText[contains(@resource-id, 'url')]");
更新:在测试网络应用程序(非本机)的情况下,您应该使用网页定位器而不是 Android 类。
试试这 2 个语句:
var element = _driver.FindElement(By.Id("com.android.browser:id/url");
driver.findElementsByXPath("//*[@class='com.android.browser' and @index='1']");
抱歉造成误导!!! 如果在浏览器中测试网络应用程序,元素应该像网页上的通常元素一样定位(而不是像 android.widget.EditText 和 android.widget.Button 那样的 类)。因此,例如尝试以下操作,您将看到一些结果:
var element = _driver
.findElementByXPath("//input[@id='lst-ib']");
要获取定位器,您应该 运行 桌面上的浏览器,打开页面并使用一些 tools/extensions,例如 Firefox 中的 Firebug 或 [=] 中的 Firebug Lite 20=] 浏览器.