Meta:-
实际上,我试图在IOS
设备中使用Appium
XCUITEST
自动化设置Geolocation
。我尝试了以下代码,它在Android
设备上运行良好,而在IOS
上抛出异常:
import org.openqa.selenium.html5.Location;
AppiumServiceBuilder builder = new AppiumServiceBuilder().usingAnyFreePort().withAppiumJS("path/to/appium/main.js");
DesiredCapabilities capabilities = new DesiredCapabilities();
capabilities.setCapability("automationName", "XCUITest");
IOSDriver driver= new IOSDriver(builder, capabilities);
//Here this code working fine with AndroidDriver
Location location = new Location(latitude, longitude, altitude);
driver.setLocation(location);
例外情况:
WebDriverException:方法尚未实现(警告:服务器未提供任何stacktrace信息)
当我尝试使用JavascriptExecutor作为:
Map<String, String> args = new HashMap<String, String>();
args.put("address", "Address");
((JavascriptExecutor)webDriver).executeScript("mobile:setLocation", args);
UnsupportedCommandException:未知的移动命令“SetLocation”。只支持scroll、swipe、pinch、doubleTap、twoFingerTap、touchAndHold、tap、dragFromToForDuration、selectPickerWheelValue、alert命令。(警告:服务器未提供任何stacktrace信息)
当我试着:
import org.openqa.selenium.remote.DriverCommand;
Map<String, String> args = new HashMap<String, String>();
args.put("location", "Address");
driver.execute(DriverCommand.SET_LOCATION, args);
例外情况:
Appium日志:
[debug][JSONWP Proxy]得到的响应状态为200:“{\n\”value\“:{\n\”state\“:\”success\“,\n\”os\“:{\n\”name\“:\”ios\“,\n\”version\“:\”10.3.1\“\n},\n\”ios\“:{\n\”simulatorversion\“:\”10.3.1\“,\n\”ios\“:{\n\”simulatorversion\“:”192.168.1.17\“\n},\n\”build\“:{\n\”time\“:”A-4888-A536-0D62E0674A2B\“,\n\”状态\“:0\n}”
这个AppleScript会工作的。
public static void setLocation(Location loc) {
try {
String[] cmd = {"osascript", "-e",
"on menu_click(mList)\n" +
" local appName, topMenu, r\n" +
"\n" +
" -- Validate our input\n" +
" if mList's length < 3 then error \"Menu list is not long enough\"\n" +
"\n" +
" -- Set these variables for clarity and brevity later on\n" +
" set {appName, topMenu} to (items 1 through 2 of mList)\n" +
" set r to (items 3 through (mList's length) of mList)\n" +
"\n" +
" -- This overly-long line calls the menu_recurse function with\n" +
" -- two arguments: r, and a reference to the top-level menu\n" +
" tell application \"System Events\" to my menu_click_recurse(r, ((process appName)'s ¬\n" +
" (menu bar 1)'s (menu bar item topMenu)'s (menu topMenu)))\n" +
"end menu_click\n" +
"\n" +
"on menu_click_recurse(mList, parentObject)\n" +
" local f, r\n" +
"\n" +
" -- `f` = first item, `r` = rest of items\n" +
" set f to item 1 of mList\n" +
" if mList's length > 1 then set r to (items 2 through (mList's length) of mList)\n" +
"\n" +
" -- either actually click the menu item, or recurse again\n" +
" tell application \"System Events\"\n" +
" if mList's length is 1 then\n" +
" click parentObject's menu item f\n" +
" else\n" +
" my menu_click_recurse(r, (parentObject's (menu item f)'s (menu f)))\n" +
" end if\n" +
" end tell\n" +
"end menu_click_recurse\n" +
"\n" +
"application \""+simulatorAppName()+"\" activate \n" +
"delay 0.2\n" +
"menu_click({\""+simulatorAppName()+"\",\"Debug\", \"Location\", \"None\"})\n" +
"\n" +
"delay 0.2\n" +
"menu_click({\""+simulatorAppName()+"\",\"Debug\", \"Location\", \"Custom Location…\"})\n" +
"\n" +
"delay 0.2\n" +
"tell application \"System Events\"\n" +
" tell process \""+simulatorAppName()+"\"\n" +
" set value of text field 1 of window \"Custom Location\" to \""+loc.getLatitude()+"\"\n" +
" set value of text field 2 of window \"Custom Location\" to \""+loc.getLongitude()+"\"\n" +
" click UI Element \"OK\" of window \"Custom Location\"\n" +
" end tell\n" +
"end tell"
};
Process process = Runtime.getRuntime().exec(cmd);
BufferedReader bufferedReader = new BufferedReader(
new InputStreamReader(process.getErrorStream()));
String lsString;
while ((lsString = bufferedReader.readLine()) != null) {
System.out.println(lsString);
}
try{Thread.sleep(10000);}catch (Exception e1){}
} catch (Exception e) {}
}
public static String simulatorAppName() {
return "Simulator";
}
获取设备的 Loaction 信息 参数说明 字段 类型 必须? 说明 deviceId String 是 设备Id completion 是 结果回调 接口定义 Swift: RokidMobileSDK.device.getLocation(deviceId: String, completion: @escaping (_ error: RKError?, _ location: Locat
获取设备地址位置 接口说明 获取设备的loaction信息 参数说明 字段 类型 必须? 说明 deviceId String 是 设备ID 示例代码 RKDeviceLocation location = RokidMobileSDK.device.getLocation(deviceId); RKDeviceLoaction数据格式: { //邮政编码 "postalCod
我是一名android开发人员,已经使用它开发上下文感知应用程序有一段时间了。位置是上下文感知的重要内容之一,而位置的准确性是非常重要的。 我知道怎么用LocationManager从GPS上得到位置...我知道如何在Android上使用谷歌地图开发应用程序...以及如何在地图上显示用户…但是我的朋友们发现,当他们去外国参加会议时,他们在LocationManager上的位置与谷歌地图相比非常不准
我想使用appium在特定的xpath上执行向左滑动。不管怎样,我能做到吗?
我的团队面临着在Ios设备上运行测试的问题,他们运行速度非常慢,每个设备大约需要19分钟,在一些Ios为13的设备上,应用程序没有打开。在IOS 13上安装了应用程序,但未安装WDA,且应用程序未打开。 在本地,我们有Xcode 11.1、node 11.6.0、appium 1.17.1,所有这些都可以在本地环境中快速、良好地工作。仅供参考,Android的完美运行需要7分钟,设备场才能运行整个
我正在评估我的iOS自动化测试应用程序。作为其中的一部分,当我选择我的设备目标作为iPhone模拟器时,我能够成功地执行appium元素检查器。但当我以实际设备为目标时,我无法调用元素检查器。 我已经用开发配置文件签署了我的应用程序,并且我能够从Xcode 5安装和运行我的应用程序。所以我的应用程序设置看起来不错,因为我可以运行我的应用程序。 然后我在Appium中配置了所有细节。应用程序GUI,