悲剧,绝对的悲剧,悲剧中的悲剧。
分类: iOS平台
2016-03-11 19:18:34
Appium has libraries for:
Language | Source |
---|---|
Note that some methods such as endTestCoverage() are not generally useful. Proper coverage support will be added once is resolved. If you want to use them anyway, consult the documentation for the bindings on GitHub.
Lock the screen.
# ruby lock 5
# python driver.lock(5)
// java driver.lockScreen(3);
// javascript driver.lock(3)
// php $this->lock(3);
// c# driver.LockDevice(3);
// objective c [driver lockDeviceScreen:3];
Send the currently active app to the background.
# ruby background_app 5
# python driver.background_app(5)
// java driver.runAppInBackground(5);
// javascript driver.backgroundApp(5)
// php $this->backgroundApp(5);
// c# driver.BackgroundApp(5);
// objective c [driver runAppInBackground:3];
Hide the keyboard. Note: on iOS, this helper function is not guaranteed to work. There is no automation hook for hiding the keyboard, and apps are free to allow the user to hide the keyboard using any of a variety of different strategies, whether that is tapping outside the keyboard, swiping down, etc... We encourage you, rather than using this method, to think about how a user would hide the keyboard in your app, and tell Appium to do that instead (swipe, tap on a certain coordinate, etc...). That being said, the default behavior here might help you.
# ruby hide_keyboard
# python driver.hide_keyboard()
// java driver.hideKeyboard();
// javascript driver.hideKeyboard()
// php $this->hideKeyboard(); $this->hideKeyboard(array('strategy' => 'pressKey', 'key' => 'Done'));
// c# driver.HideKeyboard("Done");
// objective c [driver hideKeyboard];
Open an activity in the current app or start a new app and open an activity Android only
// java driver.startActivity("appPackage","com.example.android.apis", null, null);
// javascript driver.startActivity({appPackage: 'com.example.android.apis', appActivity: '.Foo'}, cb);
# python driver.start_activity('com.example.android.apis', '.Foo')
# ruby start_activity app_package: 'io.appium.android.apis', app_activity: '.accessibility.AccessibilityNodeProviderActivity'
// c# driver.StartActivity("com.example.android.apis", ".Foo");
// php $this->startActivity(array("appPackage" => "com.example.android.apis", "appActivity" => ".Foo"));
// objective c [driver startActivity:@"com.example.android.apis" package:@".Foo"];
Open the notification shade Android only
// java driver.openNotifications();
// javascript driver.openNotifications(cb);
# python driver.open_notifications()
# ruby openNotifications
// c# driver.OpenNotifications();
// php $this->openNotifications();
// objective c [driver openNotifications];
Check if an app is installed
# ruby is_installed? "com.example.android.apis"
# python driver.is_app_installed('com.example.android.apis')
// java driver.isAppInstalled("com.example.android.apis")
// javascript driver.isAppInstalled("com.example.android.apis")
.then(function (isAppInstalled) { /*...*/ })
// php $this->isAppInstalled('com.example.android.apis');
// c# driver.IsAppInstalled("com.example.android.apis-");
// objective c [driver isAppInstalled:@"com.example.android.apis-"];
Install an app to the device.
# ruby install 'path/to/my.apk'
# python driver.install_app('path/to/my.apk')
// java driver.installApp("path/to/my.apk")
// javascript driver.installApp("path/to/my.apk")
// php $this->installApp('path/to/my.apk');
// c# driver.InstallApp("path/to/my.apk");
// objective c [driver installAppAtPath:@"path/to/my.apk"];
Remove an app from the device.
# ruby remove 'com.example.android.apis'
# python driver.remove_app('com.example.android.apis')
// java driver.removeApp("com.example.android.apis")
// javascript driver.removeApp("com.example.android.apis")
// php $this->removeApp('com.example.android.apis');
// c# driver.RemoveApp("com.example.android.apis");
// objective c [driver removeApp:@"com.example.android.apis"];
Simulate the device shaking.
# ruby shake
# python driver.shake()
// java driver.shake()
// javascript driver.shake()
// php $this->shake();
// c# driver.ShakeDevice();
// objective c [driver shakeDevice];
Close the app
# ruby close_app
# python driver.close_app();
// java driver.closeApp()
// javascript driver.closeApp()
// php $this->closeApp();
// c# driver.CloseApp();
// objective c [driver closeApp];
Launch the session for the desired capabilities. Note that this is the companion to the autoLaunch=false capability. This is not for launching arbitrary apps/activities---for that use start_activity. This is for continuing the initialization ("launch") process if you have used autoLaunch=false.
# ruby launch
# python driver.launch_app()
// java driver.launchApp()
// javascript driver.launchApp()
// php $this->launchApp();
// c# driver.LaunchApp();
// objective c [driver launchApp];
Reset the app.
# ruby reset
# python driver.reset()
// java driver.resetApp()
// javascript driver.resetApp()
// php $this->reset();
// c# driver.ResetApp();
// objective c [driver resetApp];
List all available contexts
# ruby context_array = available_contexts
# python driver.contexts
// java driver.getContextHandles()
// javascript driver.contexts().then(function (contexts) { /*...*/ })
// php $this->contexts();
// c# driver.GetContexts()
// objective c NSArray *contexts = driver.allContexts;
List the current context
# ruby context = current_context
# python driver.current_context
// java driver.getContext()
// javascript driver.currentContext().then(function (context) { /*...*/ })
// php $this->context();
// c# driver.GetContext()
// objective c NSString *context = driver.context;
Change the context to the default.
# ruby switch_to_default_context
# python driver.switch_to.context(None)
// java driver.context();
// javascript driver.context()
// php $this->context(NULL);
// c# driver.SetContext();
// objective c [driver setContext:nil];
Get the app's strings.
# ruby strings = app_strings
# python driver.app_strings
// java driver.getAppStrings();
// javascript driver.getAppStrings().then(function (appStrings) { /*...*/ })
// php $this->appStrings(); $this->appStrings('ru');
// c# driver.GetAppStrings();
// objective c [driver appStrings];
[driver appStringsForLanguage:"@ru"];
Send a key event to the device.
# ruby key_event 176
# python driver.keyevent(176)
// java driver.sendKeyEvent(AndroidKeyCode.HOME);
// javascript driver.deviceKeyEvent(wd.SPECIAL_KEYS.Home)
// php $this->keyEvent('176');
// c# driver.KeyEvent("176");
// objective c NSError *err;
[driver triggerKeyEvent:176 metastate:0 error:&err];
Android only. Get the current activity.
# ruby current_activity
# python driver.current_activity
// java driver.currentActivity();
// javascript driver.getCurrentActivity().then(function (activity) { /*...*/ })
// php $this->currentActivity();
// c# driver.GetCurrentActivity();
// objective c NSError *err;
[driver currentActivity];
An API for generating touch actions. This section of the documentation will be expanded upon soon.
# ruby touch_action = Appium::TouchAction.new element = find_element :name, 'Buttons, Various uses of UIButton' touch_action.press(element: element, x: 10, y: 10).perform
# python action = TouchAction(driver)
action.press(element=el, x=10, y=10).release().perform()
// java TouchAction action = new TouchAction(driver)
.press(mapview, 10, 10)
.release(). perform();
// javascript var action = new wd.TouchAction(driver);
action
.tap({el: el, x: 10, y: 10})
.release(); return action.perform(); // returns a promise
// php $action = $this->initiateTouchAction(); ->press(array('element' => $el)) ->release() ->perform(); $action1 = $this->initiateTouchAction(); $action1->press(array('element' => $els[0])) ->moveTo(array('x' => 10, 'y' => 0)) ->moveTo(array('x' => 10, 'y' => -75)) ->moveTo(array('x' => 10, 'y' => -600)) ->release(); $action2 = $this->initiateTouchAction(); $action2->press(array('element' => $els[1])) ->moveTo(array('x' => 10, 'y' => 10)) ->moveTo(array('x' => 10, 'y' => -300)) ->moveTo(array('x' => 10, 'y' => -600)) ->release(); $multiAction = $this->initiateMultiAction(); $multiAction->add($action1); $multiAction->add($action2); $multiAction->perform();
// c# ITouchAction action = new TouchAction(driver);
action.Press(el, 10, 10).Release();
action.Perform ();
Simulate a user swipe.
# ruby swipe start_x: 75, start_y: 500, end_x: 75, end_y: 0, duration: 0.8
# python driver.swipe(start_x=75, start_y=500, end_x=75, end_y=0, duration=800)
// java driver.swipe(75, 500, 75, 0, 0.8)
// javascript function swipe(opts) { var action = new wd.TouchAction(this);
action
.press({x: opts.startX, y: opts.startY})
.wait(opts.duration)
.moveTo({x: opts.endX, y: opts.endY})
.release(); return action.perform();
} wd.addPromiseChainMethod('swipe', swipe); // ... return driver.swipe({ startX: 75, startY: 500,
endX: 75, endY: 0, duration: 800 });
// php $this->swipe(75, 500, 75, 0, 800);
// c# todo: c#
Pinch the screen.
# ruby pinch 75
# python driver.pinch(element=el)
// java driver.pinch(element);
// javascript function pinch(el) { return Q.all([ el.getSize(), el.getLocation(),
]).then(function(res) { var size = res[0]; var loc = res[1]; var center = {
x: loc.x + size.width / 2,
y: loc.y + size.height / 2 }; var a1 = new wd.TouchAction(this); a1.press({el: el, x: center.x, y:center.y - 100}).moveTo({el: el}).release(); var a2 = new wd.TouchAction(this); a2.press({el: el, x: center.x, y: center.y + 100}).moveTo({el: el}).release(); var m = new wd.MultiAction(this); m.add(a1, a2); return m.perform();
}.bind(this));
}; wd.addPromiseChainMethod('pinch', pinch); wd.addElementPromiseChainMethod('pinch', function() { return this.browser.pinch(this);
}); // ... return driver.pinch(el); // ... return el.pinch();
$this->pinch($el);
// c# driver.Pinch(25, 25)
Zoom the screen.
# ruby zoom 200
# python driver.zoom(element=el)
// java driver.zoom(element);
// javascript function zoom(el) { return Q.all([ this.getWindowSize(), this.getLocation(el),
]).then(function(res) { var size = res[0]; var loc = res[1]; var center = {
x: loc.x + size.width / 2,
y: loc.y + size.height / 2 }; var a1 = new wd.TouchAction(this); a1.press({el: el}).moveTo({el: el, x: center.x, y: center.y - 100}).release(); var a2 = new wd.TouchAction(this); a2.press({el: el}).moveTo({el: el, x: center.x, y: center.y + 100}).release(); var m = new wd.MultiAction(this); m.add(a1, a2); return m.perform();
}.bind(this));
}; wd.addPromiseChainMethod('zoom', zoom); wd.addElementPromiseChainMethod('zoom', function() { return this.browser.zoom(this);
}); // ... return driver.zoom(el); // ... return el.zoom();
// php $this->zoom($el);
// c# driver.Zoom(100, 200);
Scroll to an element.
# ruby element = find_element :name, "Element Name" execute_script "mobile: scroll", direction: "down", element: element.ref
# python driver.execute_script("mobile: scroll", {"direction": "down", element: element.id})
// java JavascriptExecutor js = (JavascriptExecutor) driver; HashMap<String, String> scrollObject = new HashMap<String, String>();
scrollObject.put("direction", "down");
scrollObject.put("element", ((RemoteWebElement) element).getId());
js.executeScript("mobile: scroll", scrollObject);
// javascript return driver.elementByName().then(function (el) { driver.execute("mobile: scroll", [{direction: "down", element: el.value}]);
});
// php $els = $this->elements($this->using('class name')->value('android.widget.TextView')); $this->scroll($els[count($els) - 1], $els[0]);
// c# Dictionary<string, string> scrollObject = new Dictionary<string, string>();
scrollObject.Add("direction", "down");
scrollObject.Add("element", );
((IJavaScriptExecutor)driver).ExecuteScript("mobile: scroll", scrollObject));
Pulls a file from the device.
# ruby pull_file 'Library/AddressBook/AddressBook.sqlitedb'
# python driver.pull_file('Library/AddressBook/AddressBook.sqlitedb')
// java driver.pullFile("Library/AddressBook/AddressBook.sqlitedb");
// javascript driver.pullFile("Library/AddressBook/AddressBook.sqlitedb")
.then(function (base64File) { /*...*/ })
// php $this->pullFile('Library/AddressBook/AddressBook.sqlitedb');
// c# driver.PullFile("Library/AddressBook/AddressBook.sqlitedb");
Pushes a file to the device.
# ruby data = "some data for the file" path = "/data/local/tmp/file.txt" push_file path, data
# python data = "some data for the file" path = "/data/local/tmp/file.txt" driver.push_file(path, data.encode('base64'))
// java byte[] data = Base64.encodeBase64("some data for the file".getBytes()); String path = "/data/local/tmp/file.txt";
driver.pushFile(path, data)
// javascript driver.pushFile(path, data)
// php $path = 'data/local/tmp/test_push_file.txt'; $data = 'This is the contents of the file to push to the device.'; $this->pushFile($path, base64_encode($data));
// c# driver.PushFile("/data/local/tmp/file.txt", "some data for the file");
Here you will find sample code for getting/setting appium serverSetting. For more information on how they work, and which settings are supported, see [the settings docs][/docs/en/advanced-concepts/settings.md]
current_settings = get_settings
update_settings someSetting: true
current_settings = driver.get_settings()
driver.update_settings({"someSetting": true})
JsonObject settings = driver.getSettings() // java-client doesn't support setting arbitrary settings, just settings which are already provided by appium. // So for the 'ignoreUnimportantViews' setting, the following method exists: driver.ignoreUnimportantViews(true);
var settings = driver.settings(); browser.updateSettings({'someSetting': true});
$settings = $this->getSettings(); $this->updateSettings(array('cyberdelia' => "open"));
Dictionarysettings = driver.GetSettings(); // dotnet-driver doesn't support setting arbitrary settings, just settings which are already provided by appium. // So for the 'ignoreUnimportantViews' setting, the following method exists: driver.IgnoreUnimportantViews(true);
Appium's desktop app supports OS X and Windows.