| Appium - Ruby |如何声明某些文本未显示在屏幕上

时间:2016-07-14 11:04:41

标签: ruby rspec cucumber watir-webdriver appium-ios

在一个场景中,我想断言屏幕上不显示“Something”文本。

这是针对移动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

似乎显示了元素的大量示例。但是,当您要断言某些文本未显示时,则缺少信息。 任何建议都是受欢迎的。

3 个答案:

答案 0 :(得分:1)

所有示例都是将步骤定义中的文本与固定值进行比较。您应该将步骤定义中的文本与从浏览器中检索的文本进行比较。

最简单的方法是检查文本是否未包含在浏览器文本的任何位置:

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

但是,如果页面很大和/或文本不唯一,这可能会导致漏报。例如,假设页面是:

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

如果出现错误&#34;是坏事,但有其他事情&#34;没关系,检查整个浏览器文本都会失败。在这种情况下,最好将文本范围限定为不应具有文本的特定元素:

expect(browser.span(id: 'error').text).not_to include(text)

答案 1 :(得分:0)

我不熟悉Appium,但应该是这样的:

expect(foo).to_not include(text)

foo是您要检查的文字。

to_not或等效的not_to将取消以下匹配器。

答案 2 :(得分:0)

解决方案位于Appium / Issues,这里: https://github.com/appium/appium/issues/6675