无法使用Appium和C#在Android模拟器的浏览器中找到元素
我想使用c#和Appium在Android模拟器上自动化移动网站测试。 有一个简单的测试场景我想在开始时自动化:
1.启动浏览器
2.找到一个元素
3.清除它
4.发送密钥
第二步我遇到了问题。 每当MSTest尝试在下面的代码中执行FindElementById行时,我都会收到错误:“使用给定的搜索参数无法在页面上找到元素。”
[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://stackoverflow.com/"); } }
我从UIAutomator获得的方法的输入字符串如下所示。
我为FindElementById输入法尝试了几种组合:
“com.android.browser:ID / URL”
“ID / URL”
“URL”
但没有运气。
我的环境:
Windows 8.1
Appium 1.3.4.1
ChromeDriver 2.14.313457
Android设备监视器24.0.2
对不起误导!!! 在浏览器中测试Web应用程序的情况下,元素应该像网页上的常用元素一样定位(而不是像android.widget.EditText和android.widget.Button这样的类)。 因此,请尝试以下示例,您将看到一些结果:
var element = _driver .findElementByXPath("//input[@id='lst-ib']");
要获取定位器,您应该在桌面上运行浏览器,打开页面并使用一些工具/扩展,如Firefox中的Firebug或Chrome浏览器中的Firebug Lite。
试试这两个陈述:
var element = _driver.FindElement(By.Id("com.android.browser:id/url"); driver.findElementsByXPath("//*[@class='com.android.browser' and @index='1']");
更新! 以下方法不适用于Web测试:
你能尝试使用xpath找到元素吗?
@FindBy(xpath="//android.widget.EditText[contains(@resource-id, 'url')]")
因此,在您的情况下,您可以尝试以下方法:
var element = _driver.findElementByXPath("//android.widget.EditText[contains(@resource-id, 'url')]");
更新:在测试Web应用程序(非本机)的情况下,您应该使用网页定位器而不是Android类。