使用appium在android浏览器上运行selenium webdriver脚本,在模拟器上启动浏览器但抛出chromedriver异常
Posted
技术标签:
【中文标题】使用appium在android浏览器上运行selenium webdriver脚本,在模拟器上启动浏览器但抛出chromedriver异常【英文标题】:Running selenium webdriver script on android browser using appium, browser initiated on emulator but chromedriver exception thrown 【发布时间】:2014-12-01 14:54:35 【问题描述】:代码无法在 android 模拟器上执行,默认浏览器已启动但在没有任何代码执行的情况下关闭,我在启动驱动程序本身时遇到 chromedriver 异常,尽管我正在启动 android 上的默认浏览器。
我正在尝试运行用 C# 编写的 selenium webdriver 脚本,以便在 android 浏览器上执行
以下是Appium Server上的日志
启动节点服务器
信息:欢迎使用 Appium v1.2.3(修订版 90d746b373f55e8653a251d2ce8c62df37941919)
信息:在 localhost.com:4720 上启动的 Appium REST http 接口侦听器
info: [debug] 非默认服务器参数:"address":"localhost.com","port":4720,"logNoColors":true,"deviceName":"AVD_for_Nexus_S","platformName":" Android","platformVersion":"18","automationName":"Appium","browserName":"Browser"
信息:控制台日志级别:调试
信息:[37m-->[39m [37mPOST[39m [37m/wd/hub/session[39m [90m“desiredCapabilities”:“browserName”:“Browser”,“platform”:“Android”, "version":"4.3","platformName":"Android","deviceName":"AVD_for_Nexus_S"[39m
info: [debug] 提供了以下所需功能,但 appium 无法识别。它们将被传递到此服务器上运行的任何其他服务。 : 平台、版本
信息:设置模式:直接代理到 Chromedriver
info: [debug] 看起来我们想要 chrome on android
info: [debug] 创建新的 appium 会话 078f2cc6-b440-4ffa-9d97-45461a4af5da
info: [debug] 正在为会话准备设备
info: [debug] 不检查应用是否存在,因为我们假设它已经在设备上
info: [debug] 检查 adb 是否存在
信息:[调试] 使用 C:\Android\android-sdk\platform-tools\adb.exe 中的 adb
信息:检索设备
info: [debug] 正在尝试查找已连接的安卓设备
info: [debug] 正在连接设备...
信息:[调试]正在执行:“C:\Android\android-sdk\platform-tools\adb.exe”设备
信息:[调试] 1 个设备已连接
信息:找到设备模拟器 5554
info: [debug] 将设备 ID 设置为 emulator-5554
info: [debug] 等待设备准备就绪并响应 shell 命令(超时 = 5)
信息:[调试]正在执行:“C:\Android\android-sdk\platform-tools\adb.exe”-s emulator-5554 等待设备
信息:[调试]正在执行:“C:\Android\android-sdk\platform-tools\adb.exe”-s emulator-5554 shell “echo 'ready'”
info: [debug] 启动 logcat 捕获
info: [debug] 将解锁帮助应用推送到设备...
信息:[调试]正在执行:“C:\Android\android-sdk\platform-tools\adb.exe”-s emulator-5554 install“C:\Appium\node_modules\appium\build\unlock_apk\unlock_apk-调试.apk"
信息:[调试]正在执行:“C:\Android\android-sdk\platform-tools\adb.exe”-s emulator-5554 shell“dumpsys窗口”
info: [debug] 将 dumpsys 输出写入 C:\Appium\node_modules\appium.dumpsys.log
信息:[调试] 屏幕已解锁,继续。
信息:[调试] 转发系统:4724 到设备:4724
信息:[调试]正在执行:“C:\Android\android-sdk\platform-tools\adb.exe”-s emulator-5554 forward tcp:4724 tcp:4724
info: [debug] 将 appium 引导推送到设备...
信息:[调试]正在执行:“C:\Android\android-sdk\platform-tools\adb.exe”-s emulator-5554 push“C:\Appium\node_modules\appium\build\android_bootstrap\AppiumBootstrap. jar" /data/local/tmp/
信息:启动应用程序
info: [debug] 试图杀死所有 'uiautomator' 进程
info: [debug] 使用 'uiautomator' 获取所有进程
信息:[调试]正在执行:“C:\Android\android-sdk\platform-tools\adb.exe”-s emulator-5554 shell“ps 'uiautomator'”
info: [debug] 没有找到匹配的进程
信息:[调试]运行引导
info: [debug] spawning: C:\Android\android-sdk\platform-tools\adb.exe -s emulator-5554 shell uiautomator runtest AppiumBootstrap.jar -c io.appium.android.bootstrap.Bootstrap
信息:[调试] [90m[UIAUTOMATOR STDOUT] INSTRUMENTATION_STATUS:current=1[39m
信息:[调试] [90m[UIAUTOMATOR STDOUT] INSTRUMENTATION_STATUS:id=UiAutomatorTestRunner[39m
信息:[调试] [90m[UIAUTOMATOR STDOUT] INSTRUMENTATION_STATUS:class=io.appium.android.bootstrap.Bootstrap[39m
信息:[调试] [90m[UIAUTOMATOR STDOUT] INSTRUMENTATION_STATUS:stream=[39m
信息:[调试] [90m[UIAUTOMATOR STDOUT] io.appium.android.bootstrap.Bootstrap:[39m
信息:[调试] [90m[UIAUTOMATOR STDOUT] INSTRUMENTATION_STATUS:numtests=1[39m
信息:[调试] [90m[UIAUTOMATOR STDOUT] INSTRUMENTATION_STATUS:test=testRunServer[39m
信息:[调试] [90m[UIAUTOMATOR STDOUT] INSTRUMENTATION_STATUS_CODE:1[39m
info: [debug] [BOOTSTRAP] [debug] 在端口 4724 上打开的套接字
信息:[debug] [BOOTSTRAP] [debug] Appium Socket 服务器就绪
信息:[debug] [BOOTSTRAP] [debug] 正在加载 json...
信息:[debug] 将命令推送到 appium 工作队列:["getDataDir",]
info: [debug] [BOOTSTRAP] [debug] 注册的崩溃观察者。
信息:[debug] [BOOTSTRAP] [debug] 客户端已连接
info: [debug] [BOOTSTRAP] [debug] 从客户端获取数据:"cmd":"action","action":"getDataDir","params":
info: [debug] [BOOTSTRAP] [debug] 得到了 ACTION 类型的命令
info: [debug] [BOOTSTRAP] [debug] 得到命令动作:getDataDir
info: [debug] dataDir 设置为:/data
信息:[调试] 创建 Chrome 会话
info: [debug] 将chromedriver二进制设置为:C:\Appium\node_modules\appium\build\chromedriver\windows\chromedriver.exe
info: [debug] 确保 Chromedriver 存在
信息:[debug] [BOOTSTRAP] [debug] 返回结果:"value":"/data","status":0
info: [debug] 杀死所有旧的 chromedrivers,运行: FOR /F "usebackq tokens=5" %a in (
netstat -nao ^| findstr /R /C:"9515 "
) do (FOR /F "usebackq" %b in (TASKLIST /FI "PID eq %a" ^| findstr /I chromedriver.exe
) do (如果不是 %b=="" TASKKILL /F /PID %b))信息:[调试] 似乎不存在旧的 chromedrivers
信息:[debug] 生成 chromedriver:C:\Appium\node_modules\appium\build\chromedriver\windows\chromedriver.exe
info: [debug] [CHROMEDRIVER] 在端口 9515 上启动 ChromeDriver (v2.10.267521)
只允许本地连接。
info: [debug] 使用 opts 发出 http 请求:"url":"http://localhost.com:9515/wd/hub/session","method":"POST","json":"sessionId":null,"desiredCapabilities":" chromeOptions":"androidPackage":"com.android.browser","androidActivity":"com.android.browser.BrowserActivity","androidDeviceSerial":"emulator-5554"
信息:[debug] [CHROMEDRIVER STDERR] [0.008][SEVERE]:无法将套接字绑定到 localhost.com:9515
信息:[调试] [CHROMEDRIVER] 端口不可用。退出...
info: [debug] Chromedriver 退出,代码为 1
info: [debug] 正在连接设备...
信息:[调试]正在执行:“C:\Android\android-sdk\platform-tools\adb.exe”-s emulator-5554 设备
信息:[调试] 1 个设备已连接
信息:[调试]正在执行:“C:\Android\android-sdk\platform-tools\adb.exe”-s emulator-5554 shell“am force-stop com.android.browser”
信息:[调试] 停止 logcat 捕获
info: [debug] Logcat 以代码 null 终止,信号 SIGTERM
info: [debug] 清理 appium 会话
错误:Chromedriver 创建会话不起作用。状态为 200,正文为 "sessionId":"3cf07c143b1eb3020cd100b2d72cb5c9","status":100,"value":"message":"chrome 无法访问\n(驱动程序信息:chromedriver=2.10.267521,platform=Windows NT 6.1 SP1 x86)"
info: [debug] 清理 appium 会话
错误:无法启动 Appium 会话,错误是:错误:未从 Chromedriver 获得会话重定向
信息:[debug] 错误:没有从 Chromedriver 获得会话重定向
at null.<anonymous
(C:\Appium\node_modules\appium\lib\devices\android\chromedriver.js:220:12)
at Request._callback (C:\Appium\node_modules\appium\lib\devices\common.js:116:5) at Request.self.callback (C:\Appium\node_modules\appium\node_modules\request\request.js:121:22) at Request.EventEmitter.emit (events.js:98:17) at Request.<anonymous
(C:\Appium\node_modules\appium\node_modules\request\request.js:985:14)
at Request.EventEmitter.emit (events.js:117:20) at IncomingMessage.<anonymous
(C:\Appium\node_modules\appium\node_modules\request\request.js:936:12)
at IncomingMessage.EventEmitter.emit (events.js:117:20) at _stream_readable.js:920:16 at process._tickDomainCallback (node.js:459:13)
info: [debug] Responding to client with error: "status":33,"value":"message":"A new session could not be created. (Original error: Did not get session redirect from Chromedriver )","origValue":"没有从 Chromedriver 获得会话重定向","sessionId":null
信息:[37m
C# Selenium 代码 sn-p:
IWebDriver driver; TimeSpan timeSpan = new TimeSpan(0, 0, 300); DesiredCapabilities capabilities = new DesiredCapabilities(); capabilities.SetCapability("automationName", "Appium"); capabilities.SetCapability(CapabilityType.BrowserName, "Browser"); capabilities.SetCapability(CapabilityType.Platform, "Android"); capabilities.SetCapability(CapabilityType.Version, "4.3"); capabilities.SetCapability("platformName", "Android"); capabilities.SetCapability("deviceName", "AVD_for_Nexus_S"); driver = new RemoteWebDriver(new Uri("http://localhost.com:4720/wd/hub"), capabilities, timeSpan); driver.Navigate().GoToUrl("about:blank");
【问题讨论】:
【参考方案1】:嘿,你能尝试使用我使用的这些功能运行吗.. 在我的模拟器上完美运行并在 android 浏览器上运行测试
capabilities.setCapability(MobileCapabilityType.BROWSER_NAME, "Browser");
capabilities.setCapability(MobileCapabilityType.PLATFORM, "Android");
capabilities.setCapability(MobileCapabilityType.PLATFORM_NAME,"Android");
capabilities.setCapability(MobileCapabilityType.DEVICE_NAME,"Android Emulator");
capabilities.setCapability(MobileCapabilityType.VERSION, "4.4.2");
干杯。
【讨论】:
【参考方案2】:检查您的模拟器上是否安装了 Chrome。它需要在 chrome 上运行。在论坛中查看如何在模拟器上安装 chrome
【讨论】:
以上是关于使用appium在android浏览器上运行selenium webdriver脚本,在模拟器上启动浏览器但抛出chromedriver异常的主要内容,如果未能解决你的问题,请参考以下文章
如何通过浏览器登录在 Android 上自动化 appium 测试?
通过 Appium 在 Android 操作系统上运行 Selenium 测试
如何在 Mac OS 上设置 Appium 以在 Android 和 iOS 设备上运行来自 JAVA 类的自动化测试
使用 Appium 脚本自动化 android 模拟器和浏览器