I'm trying to run tests in real iOS devices in parallel using Appium with Selenium Grid. Currently I'm able to create the Hub, instantiate the Nodes and make Appium connected to each respective Node (checked appium_log). My problem right now is that I can't start Appium driver properly. What concerns me the most is that when I start Appium outside Selenium Grid, it runs ok. It seems to be a mismatch between Appium and Selenium Grid Capabilities, but I can't figure out what it is exactly because the error suggests that Appium is trying to load Safari driver instead of iOS driver. Below follows the error and the used configs. Sorry if not all needed information is provided, I'm new in the community, if anything is missing, please let me know so I can edit the post. Thanks in advance.
Error returned
Failure/Error: Unable to find [remote server]
org.openqa.selenium.remote.server.DefaultDriverFactory(DefaultDriverFactory.java) to read failed line
Selenium::WebDriver::Error::UnknownError:
The best matching driver provider org.openqa.selenium.safari.SafariDriver can't create a new driver instance for Capabilities [{app=APP_PATH, noReset=false, newCommandTimeout=60000, browserName=iPhone, deviceName=UDID, version=9.1, launchTimeout=60000, fullReset=false, platform=MAC, autoAcceptAlerts=false}]
Build info: version: '2.53.0', revision: '35ae25b', time: '2016-03-15 17:00:58'
System info: host: 'MacBook.local', ip: '127.0.0.1', os.name: 'Mac OS X', os.arch: 'x86_64', os.version: '10.12.2', java.version: '1.8.0_121'
Driver info: driver.version: unknown (org.openqa.selenium.WebDriverException)
Commands executed before starting appium driver
java -jar sel/selenium-server-standalone-2.53.0.jar -role hub
appium --full-reset -U --tmp tmp-5700/ --nodeconfig sel/node.json > tmp-5700/appium.log
node.json
{
"capabilities":
[{
"browserName": "iPhone",
"version":"9.1",
"maxInstances": 1,
"platform":"mac"
}],
"configuration":
{
"cleanUpCycle":2000,
"timeout":30000,
"proxy": "org.openqa.grid.selenium.proxy.DefaultRemoteProxy",
"url":"http://127.0.0.1:5700/wd/hub",
"host": "127.0.0.1",
"port": 5700,
"maxSession": 1,
"register": true,
"registerCycle": 5000,
"hubPort": 4444,
"hubHost": "127.0.0.1"
}
}
Ruby code used to start Appium Driver (which works without Selenium Grid - just have to remove appium_lib content)
require 'appium_lib'
require 'selenium-webdriver'
opts = {
caps: {
platformName: 'ios',
browserName: 'iPhone',
deviceName: UDID,
platform: 'mac',
version: '9.1',
app: APP_PATH,
launchTimeout: 60000,
newCommandTimeout: 60000,
autoAcceptAlerts: false,
fullReset: false,
noReset: false
},
appium_lib: {
port: 5700,
server_url: "http://127.0.0.1:5700/wd/hub",
wait_timeout: 30
}
}
Appium::Driver.new(opts).start_driver
Problem solved, hope no ones gets stucked with this same issue, but if they do, here is what was wrong. In the capabilities described in ruby used to start appium I was giving the selenium node port instead of appium port.