无法使用Appium和C#在Android模拟器的浏览器中找到元素

时间:2015-03-02 11:03:57

标签: c# android appium uiautomator

我想使用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获得的方法的输入字符串如下所示。

1

我为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

3 个答案:

答案 0 :(得分:0)

更新!以下方法不适用于Web测试:

你能尝试使用xpath找到元素吗?

@FindBy(xpath="//android.widget.EditText[contains(@resource-id, 'url')]")

因此,在您的情况下,您可以尝试以下方法:

var element = _driver.findElementByXPath("//android.widget.EditText[contains(@resource-id, 'url')]");

更新:如果测试网络应用(非本机),您应该使用网页定位器而不是Android类。

答案 1 :(得分:0)

试试这两个陈述:

var element = _driver.FindElement(By.Id("com.android.browser:id/url");
driver.findElementsByXPath("//*[@class='com.android.browser' and @index='1']");

答案 2 :(得分:0)

很抱歉误导!!! 在浏览器中测试Web应用程序的情况下,元素应该像网页上的常用元素一样定位(而不是像android.widget.EditText和android.widget.Button这样的类)。因此,请尝试以下示例,您将看到一些结果:

    var element = _driver
            .findElementByXPath("//input[@id='lst-ib']");

要获取定位器,您应该在桌面上运行浏览器,打开页面并使用一些工具/扩展,例如Firefox中的Firebug或Chrome浏览器中的Firebug Lite。