Я хочу автоматизировать тестирование мобильных веб-сайтов на эмуляторе Android с помощью C # и Appium. Я хочу для начала автоматизировать простой тестовый сценарий:
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"
"идентификатор / URL"
"url"
но не повезло.

Мое окружение:
Windows 8.1
Appium 1.3.4.1
ChromeDriver 2.14.313457
Монитор устройств Android 24.0.2

0
Paul 2 Мар 2015 в 14:03

3 ответа

Лучший ответ

Извините за введение в заблуждение !!! В случае тестирования веб-приложений в браузере элементы должны располагаться как обычные элементы на веб-странице (а не как некоторые классы, такие как android.widget.EditText и android.widget.Button). Так что попробуйте, например, следующее, и вы увидите результат:

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

Чтобы получить локаторы, вы должны запустить браузер на рабочем столе, открыть страницу и использовать некоторые инструменты / расширения, такие как Firebug в Firefox или Firebug Lite в браузере Chrome.

0
Alex 2 Мар 2015 в 14:42

Обновить! Следующий подход не подходит для веб-тестирования:

Не могли бы вы попытаться найти элемент с помощью xpath?

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

Итак, в вашем случае вы можете попробовать следующее:

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

Обновление: в случае тестирования веб-приложений (нативных) вам следует использовать локаторы веб-страниц вместо классов Android.

0
Alex 2 Мар 2015 в 14:51

Попробуйте эти 2 утверждения:

var element = _driver.FindElement(By.Id("com.android.browser:id/url");
driver.findElementsByXPath("//*[@class='com.android.browser' and @index='1']");
0
Gaurav 2 Мар 2015 в 14:27