提问人:Issei Morita 提问时间:8/16/2023 最后编辑:Issei Morita 更新时间:8/17/2023 访问量:104
SessionNotCreatedError:无法创建会话:找到某些设备,但无法使用:
SessionNotCreatedError: Could not create a session: Some devices were found, but could not be used:
问:
我正在尝试在 iOS Safari 上自动化 Web 应用程序以进行 e2e 测试。
尽管以下代码适用于 iOS 17 测试版中的模拟器,
但它似乎不适用于真实设备(iPhone 12、iOS 16.6)。
测试代码
const fs = require("fs");
const { Builder, By, Key, until } = require("selenium-webdriver");
const edge = require("selenium-webdriver/edge");
const ie = require("selenium-webdriver/ie");
const chrome = require("selenium-webdriver/chrome");
const safari = require("selenium-webdriver/safari");
const os = require("os");
const path = require("path");
const PNG = require("pngjs").PNG;
const { NodeSSH, Config } = require("node-ssh");
const { execSync } = require("child_process");
const webdriver = require("selenium-webdriver")
const { Preferences, Type, Level } = require("selenium-webdriver/lib/logging")
const wdio = require('webdriverio')
describe("test0", () => {
const getDriver = async () => {
const options = new safari.Options()
const capabilities = webdriver.Capabilities.safari()
capabilities.setPlatform('ios')
capabilities.set('safari:deviceType', 'iphone')
capabilities.set('safari:useSimulator', false)
const driver = new Builder().forBrowser('safari').withCapabilities(capabilities).setSafariOptions(options).build()
return driver
}
let driver
beforeAll(async () => {
driver = await getDriver()
}, 10000000)
afterAll(async () => {
await driver.quit();
});
test("test", async () => {
await driver.get("https://google.com");
}, 1000000);
});
当设备在打开时通过真实设备进行测试时,将发生以下错误。Device and Simulators
Xcode > Window > Device and Simulators
SessionNotCreatedError: Could not create a session: Some devices were found, but could not be used:
- iPhone (xxx-xxxxxxx): Remote Automation is turned off (turn it on via Settings > Safari > Advanced > Remote Automation)
- [unknown wireless device]: device is not paired
at Object.throwDecodedError (../node_modules/selenium-webdriver/lib/error.js:524:15)
at parseHttpResponse (../node_modules/selenium-webdriver/lib/http.js:601:13)
at Executor.execute (../node_modules/selenium-webdriver/lib/http.js:529:28)
我试过了什么
我在 iOS 上打开了 , , 设置。Safari > Advanced > Web Inspector
Safari > Advanced > Remote Automation
Developper > Enable UI Automation
我启用了 safaridriver 运行。safaridriver --enable
版本
Xcode:Xcode 15 测试版。 iOS:iOS 17 测试版。 MacOS:Ventura 13.5。
答:
0赞
Issei Morita
8/17/2023
#1
我通过手动生成解决了这个问题,就像下面的代码一样。safaridriver
const fs=require("fs")
const { Builder, By, Key, until, WebDriver }=require("selenium-webdriver")
const edge=require("selenium-webdriver/edge")
const ie=require("selenium-webdriver/ie")
const chrome=require("selenium-webdriver/chrome")
const safari=require("selenium-webdriver/safari")
const os=require("os")
const path=require("path")
const PNG=require("pngjs").PNG
const { NodeSSH, Config }=require("node-ssh")
const { execSync, spawn }=require("child_process")
const webdriver=require("selenium-webdriver")
const { Preferences, Type, Level }=require("selenium-webdriver/lib/logging")
const { Executor, HttpClient }=require('selenium-webdriver/http')
const wdio=require('webdriverio')
describe("test0", () => {
const getDriver=async () => {
const serverOpts={
port: 4723,
hostname: 'localhost',
}
const url=`http://${serverOpts.hostname}:${serverOpts.port}`
const safariDriver=spawn('safaridriver', ['-p', `${serverOpts.port}`, '--diagnose'], { shell: true, env: process.env, detached: false })
safariDriver.stdout.pipe(process.stdout)
safariDriver.stderr.pipe(process.stderr)
await new Promise((resolve) => {
safariDriver.on('spawn', () => {
setTimeout(() => {
resolve()
}, 3000)
})
})
const executor=
new Executor(
new HttpClient(url),
null,
null
)
return WebDriver.createSession(executor, {
platformName: 'iOS',
browserName: 'safari',
'appium:automationName': 'Safari',
'safari:deviceType': 'iphone',
'safari:useSimulator': false,
}, () => { safariDriver.kill() })
}
let driver
beforeAll(async () => {
driver = await getDriver()
}, 10000000)
afterAll(async () => {
await driver.quit();
});
test("test", async () => {
await driver.get("https://google.com");
}, 1000000);
});
评论