使用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 v​​1.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 模拟器和浏览器

如何使用 Appium 滚动 Robot Framework 以在 Android 设备上测试应用程序

appium+python自动化60-windows上同时启动多个appium服务,让多个android机器并行运行