在一个场景中,我想断言屏幕上不显示“Something”文本。
这是针对移动iOS应用的测试。 这是一个Appium测试,在Cucumber + Watir-Webdriver中。步骤是用Ruby编写的。
这是我迄今为止尝试过的RSpec期望:
Given /^I should NOT see text "([^"]*)" displayed$/ do |text|
text_exact(text).displayed? == false
end
Given /^I should NOT see text "([^"]*)" displayed$/ do |text|
expect(nil).to eq(text)
end
Given /^I should NOT see text "([^"]*)" displayed$/ do |text|
expect('Something').to_not eq(text)
end
Given /^I should NOT see text "([^"]*)" displayed$/ do |text|
expect(text).to eq(false)
end
似乎显示了元素的大量示例。但是,当您要断言某些文本未显示时,则缺少信息。 任何建议都是受欢迎的。
答案 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