|Аппиум - Рубин| Как можно утверждать, что определенный текст не отображается на экране

В сценарии я хочу утверждать, что текст «Что-то» не отображается на экране.

Это тест для мобильного приложения iOS. Это тест Appium в Cucumber + Watir-Webdriver. Шаги написаны на Ruby.

Это то, что я пытался до сих пор с ожиданиями RSpec:

1

    Given /^I should NOT see text "([^"]*)" displayed$/ do |text|
  text_exact(text).displayed? == false
end

2

Given /^I should NOT see text "([^"]*)" displayed$/ do |text|
  expect(nil).to eq(text)
end

3

Given /^I should NOT see text "([^"]*)" displayed$/ do |text|
  expect('Something').to_not eq(text)
end

4

Given /^I should NOT see text "([^"]*)" displayed$/ do |text|
  expect(text).to eq(false)
end

Кажется, есть много примеров для элемента, когда отображается. Однако, если вы хотите утверждать, что определенный текст не отображается, значит, информации не хватает. Любое предложение приветствуется.


person Stipe    schedule 14.07.2016    source источник


Ответы (3)


Все примеры сравнивают текст из определения шага с фиксированным значением. Вы должны сравнивать текст из определения шага с текстом, полученным из браузера.

Самый простой подход — проверить, не включен ли текст где-либо в текст браузера:

expect(browser.text).not_to include(text)

Однако это может привести к ложным отрицательным результатам, если страница большая и/или текст не уникален. Например, скажем, страница:

<html>
  <body>
    <span id="error">Something wrong</span>
    <span>Something else</span>
  </body>
</html>

Если наличие «Что-то не так» — это плохо, а наличие «Что-то еще» — нормально, проверка всего текста в браузере не удастся. В этом случае было бы лучше ограничить текст конкретным элементом, который не должен иметь текста:

expect(browser.span(id: 'error').text).not_to include(text)
person Justin Ko    schedule 14.07.2016
comment
Спасибо, Джастин. Это мобильное приложение iOS. Что я мог использовать, кроме browser.text ? - person Stipe; 14.07.2016
comment
Вы используете Watir-Webdriver, верно? browser будет любой переменной, которую вы использовали для хранения экземпляра Watir::Browser? - person Justin Ko; 14.07.2016
comment
Да. browser = Watir::Browser.new DRIVER.to_sym, :http_client =› клиент - person Stipe; 14.07.2016
comment
Это мой шаг: Given /^I should NOT see text "([^"]*)" displayed$/ do |text| expect(browser.text).not_to include(text) end , а это корнишон: And I should NOT see text "Something" displayed . Я получаю сообщение об ошибке: undefined local variable or method browser' for #‹AppiumWorld:0x00000101e97f30› (NameError) ` - person Stipe; 14.07.2016
comment
Извините, мой опыт работы с Appium довольно ограничен. В шагах, как вы взаимодействуете с приложением — например, щелкаете ссылки и вводите формы? Я ожидал, что вам понадобится доступ к browser там. - person Justin Ko; 14.07.2016
comment
Он открывает симулятор iOS из Xcode, а затем выполняет тест. Я добавил браузер, и это открывает симулятор Xcode и браузер Chrome с пустым значением в строке поиска. Этот подход, похоже, не работает для мобильного приложения, поскольку тест в любом случае проходит. Спасибо, в любом случае - person Stipe; 14.07.2016
comment
Из любопытства, есть ли у вас какие-либо тесты, которые утверждают, что отображается указанный текст? - person Justin Ko; 14.07.2016
comment
Да: #1 Given(/^I must see text "([^"]*)" displayed$/) do |text| wait { text_exact text } end #2 Given /^I should see text "([^"]*)" displayed$/ do |text| expect('Some text').to eq(text) end #3 Given(/^I should see the title "([^"]*)" displayed$/) do |arg1| find_element(:xpath, arg1).displayed? == true end - person Stipe; 14.07.2016
comment
Я думаю, вы, возможно, захотите перепроверить свои обычаи. Из того, что я вижу, ваши шаги используют Appium напрямую вместо Watir-Webdriver, то есть вы объявляете browser, но на самом деле никогда его не используете. Адресация, которая должна позволить вам использовать предложенный код. - person Justin Ko; 21.07.2016
comment
Нет, Джастин, это не сработает с симулятором. Спасибо за труд и попытку помочь - person Stipe; 22.07.2016
comment
я использую селен, и просто вызов texts возвращает видимые тексты - person juhlila; 29.07.2016

Я не знаком с Appium, но это должно быть что-то вроде:

expect(foo).to_not include(text)

Где foo — это текст, который вы проверяете.

(to_not или эквивалент not_to будет отрицать следующий сопоставитель).

person Andy Waite    schedule 14.07.2016

решение находится в Appium/Issues, здесь: https://github.com/appium/appium/issues/6675

person Stipe    schedule 22.07.2016