4

如何在我的葫芦/黄瓜测试中访问 iOS 上的警报视图的文本?

NSString *msgString = [NSString stringWithFormat:@"No: %@\n Latitude: %f\n Longitude: %f", wrapper.no, wrapper.latitude, wrapper.longitude];
UIAlertView *alert = [[[UIAlertView alloc] initWithTitle:@"Really reset?" message:@"msgString" delegate:self cancelButtonTitle:@"Cancel" otherButtonTitles:nil] autorelease];
// optional - add more buttons:
[alert addButtonWithTitle:@"Yes"];
[alert show];

我想断言警报具有预期的内容:

Feature: Running a test
  As a user using a phone connected to the internet
  I want to have correct sample data retrieved from cache or net
  So I can read the values of the tableview

   Scenario: Testing retrieved data

  Given the app is running
  Then I press "Refresh"
  Then I should see "Some value"
  Then I press "Some value"
  Then I should /*See an alert with "myMessage"*/
  Then I press "OK"

  And take picture

因此,如果我将字符串更改为简单的“否:”并丢弃字符串中的所有其他内容,它似乎确实有效,但我无法使用更复杂的字符串运行它:(

4

4 回答 4

4

对于 iOS 7 及更高版本:以下葫芦代码可以正常工作。

Then I should see "your text here"
And I should see "Call XXX"
And I should see "Cancel"

为我工作。

于 2013-11-29T16:18:46.810 回答
4

我测试了这段代码并且工作正常

在步骤定义文件(ProjectName/features/step_definitions/my_first_steps.rb)中添加

Then /^I see an alert with "([^\"]*)" text$/ do |message|
    result = query("view:'UIAlertView' label text:'#{message}'").empty?
    if result
        screenshot_and_raise "could not find text field with AlertView with text '#{message}'"
    end
    sleep(STEP_PAUSE)
end

并在功能文件中

Then I see an alert with "Email cannot be empty." text

如果文本与消息不匹配,它将截取屏幕并通过测试

但这适用于您的自定义警报而不是系统警报..!!

如果您需要阅读警报中的消息,这将对您有所帮助

打开$ calabash-ios console

查询喜欢query("view:'UIAlertView'",:message)

添加更多....

或者你可以使用类似的东西

Then /^I wait until alert with text "([^\"]*)" and press "([^\"]*)" button$/ do |message, button|

  wait_for_elements_exist(["alertView child label marked:'#{message}'"], :timeout => 30,  :retry_frequency => 0.3,:timeout_message => "Timed out waiting..",:screenshot_on_error => true )
    if element_exists("alertView child label marked:'#{message}'")
      touch("button marked:'#{button}'")
      sleep(STEP_PAUSE)
    else
      screenshot_and_raise "Alert Element not found"
    end
end
于 2013-05-08T09:33:45.710 回答
3

添加换行支持的一种解决方案是将变量从特征中的字符串中取出,以便可以通过 ruby​​ 代码添加换行:

Then I see a popup with latitude 10 and longitude 20

来电:

Then /^I see a popup with latitude (\d+) and longitude (\d+)$/ do |lat, lon|
  msg = "Latitude:#{lat}\nLongitude:#{lon}"
  should_see_alert_with_text msg
end

使用:

def should_see_alert_with_text (text)
  wait_poll(:until_exists => 'alertView', :timeout => 5) do
    actual = query('alertView child label', :text).first
    unless actual.eql? text
      screenshot_and_raise "should see alert view with message '#{text}' but found '#{actual}'"
    end
  end
end
于 2013-05-14T10:19:30.843 回答
1

calabash-ios 问题的链接隐藏在评论中。

https://github.com/calabash/calabash-ios/issues/149

在那个问题中,我提供了一个示例,说明如何使用换行符处理文本搜索。

Karl 还建议使用多行字符串(“pystrings”)编写步骤

Then I see an alert with text:
"""
Latitude:59
Longitude:17
"""
于 2013-12-11T01:52:27.403 回答