简体   繁体   English

我如何从葫芦中的警报(ios)中读取文本

[英]How do i read text from an Alert(ios) in calabash

How can I access the text of an alertview on iOS in my calabash/cucumber tests? 如何在我的葫芦/黄瓜测试中访问iOS上的alertview文本?

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];

I want to assert that the alert has the expected content: 我想声明警报具有预期的内容:

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

So if i change the string to simply "No:" and discard everything else from the string, it does actually seem to work, but i cant get it running with my more complex string :( 因此,如果我将字符串更改为“否:”并丢弃字符串中的所有其他内容,它实际上似乎工作,但我不能让它运行我更复杂的字符串:(

I tested this code and its working fine 我测试了这段代码并且工作正常

inside step definition file (ProjectName/features/step_definitions/my_first_steps.rb) add 内部步骤定义文件(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

and in feature file 并在功能文件中

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

if text doesn't match with the message it will take a screenshot and fails the test 如果文本与消息不匹配,则会截取屏幕截图并且未通过测试

But this is working for your custom alerts not on system alerts..!! 但这适用于您的自定义警报而不是系统警报.. !!

this will help you if you need to read the message from alert 如果您需要从警报中读取消息,这将对您有所帮助

open $ calabash-ios console and 打开$ calabash-ios console

query like query("view:'UIAlertView'",:message) 像查询一样query("view:'UIAlertView'",:message)

add more.... 添加更多....

Or You can use something like 或者您可以使用类似的东西

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

For iOS 7 and above: following calabash code will work fine. 对于iOS 7及更高版本:以下calabash代码可以正常工作。

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

Works for me. 适合我。

A solution to add newline support is to take the variables out of the string in the features so that the newline can be added by the ruby code: 添加换行符支持的解决方案是从函数中的字符串中取出变量,以便可以通过ruby代码添加换行符:

Then I see a popup with latitude 10 and longitude 20

Calls: 呼叫:

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

Using: 使用:

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

The link to the calabash-ios issue was buried in the comments. 关于calabash-ios问题的链接被隐藏在评论中。

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

In that issue, I provide an example of how to handle search for text with newlines. 在该问题中,我提供了如何使用换行符处理文本搜索的示例。

Karl also suggests writing the step with multi-line strings ("pystrings") 卡尔还建议用多线串(“pystrings”)编写步骤

Then I see an alert with text:
"""
Latitude:59
Longitude:17
"""

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM