{"id":28564130,"url":"https://github.com/appium/perl-client","last_synced_at":"2025-06-10T13:09:38.850Z","repository":{"id":19499027,"uuid":"22745329","full_name":"appium/perl-client","owner":"appium","description":null,"archived":false,"fork":false,"pushed_at":"2021-08-05T18:52:46.000Z","size":2571,"stargazers_count":3,"open_issues_count":3,"forks_count":9,"subscribers_count":17,"default_branch":"master","last_synced_at":"2025-04-19T10:56:26.488Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"Perl","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/appium.png","metadata":{"files":{"readme":"README.md","changelog":"Changes","contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2014-08-08T03:53:22.000Z","updated_at":"2021-08-05T18:52:49.000Z","dependencies_parsed_at":"2022-08-23T17:20:12.049Z","dependency_job_id":null,"html_url":"https://github.com/appium/perl-client","commit_stats":null,"previous_names":[],"tags_count":14,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/appium%2Fperl-client","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/appium%2Fperl-client/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/appium%2Fperl-client/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/appium%2Fperl-client/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/appium","download_url":"https://codeload.github.com/appium/perl-client/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/appium%2Fperl-client/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":259080990,"owners_count":22802404,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2025-06-10T13:09:37.216Z","updated_at":"2025-06-10T13:09:38.841Z","avatar_url":"https://github.com/appium.png","language":"Perl","funding_links":[],"categories":[],"sub_categories":[],"readme":"# NAME\n\nAppium - Perl bindings to the Appium mobile automation framework (WIP)\n\n[![Build Status](https://travis-ci.org/appium/perl-client.svg?branch=master)](https://travis-ci.org/appium/perl-client)\n\n# VERSION\n\nversion 0.0804\n\n# SYNOPSIS\n\n    my $appium = Appium-\u003enew(caps =\u003e {\n        app =\u003e '/url/or/path/to/mobile/app.zip'\n    });\n\n    $appium-\u003epage;\n    $appium-\u003efind_element('TextField1', 'name')-\u003esend_keys('5');\n    $appium-\u003equit;\n\n# DESCRIPTION\n\nAppium is an open source test automation framework for use with native\nand hybrid mobile apps.  It drives iOS and Android apps using the\nWebDriver JSON wire protocol. This module is a thin extension of\n[Selenium::Remote::Driver](https://metacpan.org/pod/Selenium::Remote::Driver) that adds Appium specific API endpoints\nand Appium-specific constructor defaults. It's woefully incomplete at\nthe moment, so feel free to pitch in at the [Github\nrepo](https://github.com/appium/perl-client)! For details on how Appium\nextends the Webdriver spec, see the Selenium project's [spec-draft\ndocument](https://code.google.com/p/selenium/source/browse/spec-draft.md?repo=mobile).\n\nNote that like [Selenium::Remote::Driver](https://metacpan.org/pod/Selenium::Remote::Driver), you shouldn't have to\ninstantiate [Appium::Element](https://metacpan.org/pod/Appium::Element) on your own; this module will create\nthem when necessary so that all you need to know is what methods are\nappropriate on an element vs the driver.\n\n    my $appium = Appium-\u003enew( caps =\u003e { app =\u003e '/path/to/app.zip' } );\n\n    # automatically instantiates Appium::Element for you\n    my $elem = $appium-\u003efind_element('test', 'id');\n    $elem-\u003eclick;\n\n# NEW OR UPDATED FUNCTIONALITY\n\n## Contexts\n\nInstead of using windows to manage switching between native\napplications and webviews, use the analogous context methods:\n\n    my $current = $appium-\u003ecurrent_context;\n    my @contexts = $appium-\u003econtexts;\n\n    my $context = 'WEBVIEW_1'\n    $appium-\u003eswitch_to-\u003econtext( $context );\n\n## Finding Elements\n\nThere are different strategies available for finding elements in\nAppium. The options for strategies in a native application are:\n\n    id\n    name\n    xpath\n    class|class_name\n    accessibility_id\n    ios|ios_uiautomation\n    android|android_uiautomator\n\nIf you're testing a mobile browser like Chrome or Safari, you'll have\naccess to the same set of finders as in Webdriver:\n\n    class\n    class_name\n    css\n    id\n    link\n    link_text\n    name\n    partial_link_text\n    tag_name\n    xpath\n\nHere are some examples of using the Appium specific strategies:\n\n    # iOS UIAutomation\n    $driver-\u003efind_element( $locator , 'ios' );\n\n    # Android UIAutomator\n    $driver-\u003efind_element( $locator , 'android' );\n\n    # iOS accessibility identifier\n    $driver-\u003efind_element( $locator , 'accessibility_id' );\n\nNote that using `id` as your finding strategy also seems to find\nelements by accessibility\\_id.\n\nIf you have Selenium::Remote::Driver v0.24 or later, you'll also have\naccess to these non-croaking, auto-generated parameter versions of the\nfinders; see [\"Selenium::Remote::Driver/find\\_element\"](#selenium-remote-driver-find_element) for more\ninformation. These subs take one argument: the locator for the element\nyou want, and they'll throw a warning and return `0` if an element is\nnot found.\n\n    find_element_by_id\n    find_element_by_name\n    find_element_by_xpath\n    find_element_by_class\n    find_element_by_accessibility_id\n    find_element_by_ios\n    find_element_by_android\n    find_element_by_class\n    find_element_by_css\n    find_element_by_id\n    find_element_by_link\n    find_element_by_name\n    find_element_by_partial_link_text\n    find_element_by_tag_name\n    find_element_by_xpath\n\n# METHODS\n\n## contexts ()\n\nReturns the contexts within the current session\n\n    $appium-\u003econtexts;\n\n## current\\_context ()\n\nReturn the current active context for the current session\n\n    $appium-\u003ecurrent_context;\n\n## switch\\_to-\u003econtext ( $context\\_name )\n\nSwitch to the desired context for the current session\n\n    $appium-\u003eswitch_to-\u003econtext( 'WEBVIEW_1' );\n\n## hide\\_keyboard( \\[key\\_name|key|strategy =\u003e $key\\_or\\_strategy\\] )\n\nHides the software keyboard on the device. In iOS, you have the option\nof using `key_name` to close the keyboard by pressing a specific\nkey. Or, you can specify a particular strategy; the default strategy\nis `tapOutside`. In Android, no parameters are used.\n\n    $appium-\u003ehide_keyboard;\n    $appium-\u003ehide_keyboard( key_name =\u003e 'Done');\n    $appium-\u003ehide_keyboard( strategy =\u003e 'pressKey', key =\u003e 'Done');\n\n## app\\_strings ( \\[language\\] )\n\nGet the application strings from the device for the specified\nlanguage; it will return English strings by default if the language\nargument is omitted.\n\n    $appium-\u003eapp_strings\n    $appium-\u003eapp_strings( 'en' );\n\n## reset ()\n\nReset the current application\n\n    $appium-\u003ereset;\n\n## press\\_keycode ( keycode, \\[metastate\\])\n\nAndroid only: send a keycode to the device. Valid keycodes can be\nfound in the [Android\ndocs](http://developer.android.com/reference/android/view/KeyEvent.html).\n`metastate` describes the pressed state of key modifiers such as\nMETA\\_SHIFT\\_ON or META\\_ALT\\_ON; more information is available in the\nAndroid KeyEvent documentation.\n\n    $appium-\u003epress_keycode(176);\n\n## long\\_press\\_keycode ( keycode, \\[metastate\\])\n\nAndroid only: send a long press keycode to the device. Valid keycodes\ncan be found in the [Android\ndocs](http://developer.android.com/reference/android/view/KeyEvent.html).\n`metastate` describes the pressed state of key modifiers such as\nMETA\\_SHIFT\\_ON or META\\_ALT\\_ON; more information is available in the\nAndroid KeyEvent documentation.\n\n    $appium-\u003elong_press_keycode(176);\n\n## current\\_activity ()\n\nGet the current activity on the device.\n\n    $appium-\u003ecurrent_activity;\n\n## pull\\_file ( $file )\n\nPull a file from the device, returning it Base64 encoded.\n\n    $appium-\u003epull_file( '/tmp/file/to.pull' );\n\n## pull\\_folder ( $path )\n\nRetrieve a folder at path, returning the folder's contents in a zip\nfile.\n\n    $appium-\u003epull_folder( 'folder' );\n\n## push\\_file ( $path, $encoded\\_data )\n\nPuts the data in the file specified by `path` on the device. The data\nmust be base64 encoded.\n\n    $appium-\u003epush_file( '/file/path', $base64_data );\n\n## complex\\_find ( $selector )\n\nSearch for elements in the current application, given an array of\nselection criteria.\n\n    $appium-\u003ecomplex_find( $selector );\n\n## background\\_app ( $time\\_in\\_seconds )\n\nDefer the application to the background on the device for the\ninterval, given in seconds.\n\n    $appium-\u003ebackground_app( 5 );\n\n## is\\_app\\_installed ( $bundle\\_id )\n\nCheck whether the application with the specified `bundle_id` is\ninstalled on the device.\n\n    $appium-\u003eis_app_installed( $bundle_id );\n\n## install\\_app ( $app\\_path )\n\nInstall the desired app on to the device\n\n    $appium-\u003einstall_app( '/path/to/local.app' );\n\n## remove\\_app( $app\\_id )\n\nRemove the specified application from the device by app ID.\n\n    $appium-\u003eremove_app( 'app_id' );\n\n## launch\\_app ()\n\nStart the application specified in the desired capabilities on the\ndevice.\n\n    $appium-\u003elaunch_app;\n\n## close\\_app ()\n\nStop the running application, as specified in the desired\ncapabilities.\n\n    $appium-\u003eclose_app;\n\n## end\\_test\\_coverage ( $intent, $path )\n\nAndroid only: end the coverage collection and download the specified\n`coverage.ec` file from the device. The file will be returned base 64\nencoded.\n\n    $appium-\u003eend_test_coverage( 'intent', '/path/to/coverage.ec' );\n\n## lock ( $seconds )\n\nLock the device for a specified number of seconds.\n\n    $appium-\u003elock( 5 ); # lock for 5 seconds\n\n## is\\_locked\n\nQuery the device for its locked/unlocked state.\n\n    $locked = $appium-\u003eis_locked\n\n## shake ()\n\nShake the device.\n\n    $appium-\u003eshake;\n\n## open\\_notifications ()\n\nAndroid only, API level 18 and above: open the notification shade on\nAndroid.\n\n    $appium-\u003eopen_notifications;\n\n## network\\_connection ()\n\nAndroid only: retrieve an integer bitmask that describes the current\nnetwork connection configuration. Possible values are listed in\n[\"set\\_network\\_connection\"](#set_network_connection).\n\n    $appium-\u003enetwork_connection;\n\n## set\\_network\\_connection ( $connection\\_type\\_bitmask )\n\nAndroid only: set the network connection type according to the\nfollowing bitmask:\n\n    # Value (Alias)      | Data | Wifi | Airplane Mode\n    # -------------------------------------------------\n    # 0 (None)           | 0    | 0    | 0\n    # 1 (Airplane Mode)  | 0    | 0    | 1\n    # 2 (Wifi only)      | 0    | 1    | 0\n    # 4 (Data only)      | 1    | 0    | 0\n    # 6 (All network on) | 1    | 1    | 0\n\n    $appium-\u003eset_network_connection(6);\n\n## tap ( $x, $y )\n\nPerform a precise tap. See [\"tap\" in Appium::TouchActions](https://metacpan.org/pod/Appium::TouchActions#tap) for more\ninformation.\n\n    $appium-\u003etap( 0.5, 0.5 );\n\n## page\n\nDisplay a quick summary of all interesting elements on the current\nview. See [Appium::Android::CanPage](https://metacpan.org/pod/Appium::Android::CanPage) for more information about the\nAndroid implementation, and [Appium::Ios::CanPage](https://metacpan.org/pod/Appium::Ios::CanPage) for the iOS\nimplementation.\n\n# SEE ALSO\n\nPlease see those modules/websites for more information related to this module.\n\n- [Appium::Element](https://metacpan.org/pod/Appium::Element)\n- [Selenium::Remote::Driver](https://metacpan.org/pod/Selenium::Remote::Driver)\n- [http://appium.io](http://appium.io)\n\n# BUGS\n\nPlease report any bugs or feature requests on the bugtracker website\nhttps://github.com/appium/perl-client/issues\n\nWhen submitting a bug or request, please include a test-file or a\npatch to an existing test-file that illustrates the bug or desired\nfeature.\n\n# AUTHOR\n\nDaniel Gempesaw \u003cgempesaw@gmail.com\u003e\n\n# CONTRIBUTOR\n\nFreddy Vega \u003cfreddy@vgp-miami.com\u003e\n\n# COPYRIGHT AND LICENSE\n\nThis software is copyright (c) 2014 by Daniel Gempesaw.\n\nThis is free software; you can redistribute it and/or modify it under\nthe same terms as the Perl 5 programming language system itself.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fappium%2Fperl-client","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fappium%2Fperl-client","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fappium%2Fperl-client/lists"}