2016-02-06 5 views
1

У меня возникли проблемы с написанием клиентских тестов с использованием последней версии (0.4.0) этой библиотеки Node.js: https://github.com/admc/wd. Я использую Sencha Touch 2.4.Как идентифицировать элементы пользовательского интерфейса от приложения Sencha Touch для тестирования с помощью Appium?

Я могу получить веб-селен selenium, подключенный к серверу Appium app (v 1.4.13), который, в свою очередь, загружает мое приложение Sencha Touch должным образом в моем указанном симуляторе iPhone. Я могу проверить элементы с помощью Appium Inspector.

Однако при написании тестов я не могу идентифицировать какие-либо элементы пользовательского интерфейса при первом просмотре приложения. В Sencha Architect я установил компонент кнопки id на primary-login-container-new-account-button.

Например, для каждого из приведенных ниже случаев, кажется, элемент не был найден. Я боюсь, что динамическое поколение элементов Sencha является причиной того, что я не могу найти элементы. Тем не менее, я читал, что Selenium - это вариант для тестирования приложений Sencha для пользовательского интерфейса, поэтому это должно быть легко возможным? Мой проект также завернут в Кордову.

1.

[...] 
it("should be able to click on Create New Account button1", function() { 
    return driver 
    .elementById('primary-login-container-new-account-button') 
    .text().should.become('Create New Account'); 
}); 
// Error: [elementById("primary-login-container-new-account-button")] Error response status: 7, , NoSuchElement - An element could not be located on the page using the given search parameters. Selenium error: An element could not be located on the page using the given search parameters. 

2.

it("should be able to click on Create New Account button2", function() { 
    return driver 
    .elementByAccessibilityId('primary-login-container-new-account-button') 
    .text().should.become('Create New Account'); 
}); 
// Error: [elementByAccessibilityId("primary-login-container-new-account-button")] Error response status: 7, , NoSuchElement - An element could not be located on the page using the given search parameters. Selenium error: An element could not be located on the page using the given search parameters. 

3.

it("should be able to click on Create New Account button3", function() { 
    return driver 
    .elementByIdOrNull('primary-login-container-new-account-button', function(err, element) { 
    }); 
}); 
// returns element and err as null 

4.

it("should be able to click on Create New Account button4", function() { 
    return driver 
     .elementByCssSelector('#primary-login-container-new-account-button') 
     .text().should.become('Create New Account'); 
    }); 
// Error: [elementByCssSelector("#primary-login-container-new-account-button")] Error response status: 9, , UnknownCommand - The requested resource could not be found, or a request was received using an HTTP method that is not supported by the mapped resource. Selenium error: Invalid locator strategy: css selector 

5.

it("should be able to click on Create New Account button5", function() { 
    return driver 
    .elementByName('createUserAccountButton') 
    .text().should.become('Create New Account'); 
}); 
// Error: [elementByName("createUserAccountButton")] Error response status: 7, , NoSuchElement - An element could not be located on the page using the given search parameters. Selenium error: An element could not be located on the page using the given search parameters. 

6.

it("should be able to click on Create New Account button6", function() { 
    return driver 
    .waitForElementById('#primary-login-container-new-account-button', 30000) 
    .text().should.become('Create New Account'); 
}); 
// Error: [waitForElementById("#primary-login-container-new-account-button",30000)] Element condition wasn't satisfied! 
[...] 

ответ

1

Просто испытание, так как ваше приложение построено на Кордову, осмотрите элемент primary-login-container-new-account-button с помощью инспектировать устройств на Chrome/Safari. Перед тем, как вы сможете получить к нему доступ, должны быть некоторые атрибуты, такие как css или class, которые вы должны найти во время проверки. Сказав, что если вы можете проверить их с помощью Chrome/Safari, вы просматриваете веб-представление, для которого вы должны переключать контекст в Webview для доступа к элементам здесь.

Поскольку элементы генерируются динамически Sencha, возможно, этим атрибутам также присвоено значение random key-value. В этом случае вам нужно будет указать сгенерированное значение для доступа к вашим элементам просмотра.

Примечание: Было бы здорово, чтобы посмотреть на скриншот Chrome Inspected элементов на вид из вашего приложения вместе с Appium Inspector скриншоте, соответствующей тем же самым.

+0

Имеет ли значение использование Chrome или Safari для проверки элементов? В Safari для iOS-устройств гораздо проще сделать это. – writofmandamus

+0

Я вижу идентификатор, присутствующий в родительском div от инспектора Safari. Я также попробовал выполнить done() из Mocha после инициализации драйвера, чтобы убедиться, что тесты выполняются после блока before. Я вижу, что мое приложение отображается в симуляторе, когда выполняется первая строка первого теста. Я также попытался выполнить поиск через elementByClassName (например, класс normal-none), где мне не удалось получить какие-либо элементы.Однако, когда я искал с помощью UIAnormal-none, я не получил ответ об ошибке, но в итоге это был пустой массив. Мои скриншоты находятся здесь: http://imgur.com/a/PwfER – writofmandamus

+0

В вашем скриншоте нет элемента с 'primary-login-container-new-account-button'. Возможно, обертывание его в Кордове - это то, что меняет это. Чтобы попробовать удачу, вы можете получить доступ к элементу с помощью XPath на том же самом представлении, чтобы узнать, можете ли вы вообще получить к ним доступ или нет. На стороне примечания: я считаю, что вы должны переключать контекст в Webview для доступа к элементам здесь. – nullpointer

Смежные вопросы