首页 > 解决方案 > Appium + Watir + Chromedriver 处理命令时出现未知的服务器端错误

问题描述

我的项目中有以下代码:

功能/env.rb

require 'rubygems'
require 'rspec'
require 'watir'
require 'webdrivers'
require 'yaml'
require 'fileutils'
require './features/Util/Tools.rb'
require 'json'
require 'watir-scroll'
require "mini_magick"
require 'watir-screenshot-stitch'
require 'appium_lib'
require 'selenium-webdriver'

    server_url = 'http://localhost:4723/wd/hub/'

    capabilities =
    {
    platformName: 'Android',
    platformVersion: '7.0',
    deviceName: 'Android Emulator',
    browserName: 'Chrome'
    }

    $navegador = "chrome_dev_mobile"

    $appium_driver = Selenium::WebDriver.for(:remote, :desired_capabilities => capabilities, :url => server_url)

    $driver Watir::Browser.new $appium_driver

当我运行我的黄瓜功能时,我收到了这个错误:

And Verificar Portal abierto                   # features/step_definitions/Home/Home_Chile/SD1_Home.rb:16
  An unknown server-side error occurred while processing the command. Original error: unknown error: Argument to isShown must be of type Element
    (Session info: chrome=69.0.3497.100)
    (Driver info: chromedriver=2.42.591059 (a3d9684d10d61aa0c45f6723b327283be1ebaad8),platform=Mac OS X 10.13.6 x86_64) (Selenium::WebDriver::Error::UnknownError)
  UnknownError: An unknown server-side error occurred while processing the command. Original error: unknown error: Argument to isShown must be of type Element
    (Session info: chrome=69.0.3497.100)
    (Driver info: chromedriver=2.42.591059 (a3d9684d10d61aa0c45f6723b327283be1ebaad8),platform=Mac OS X 10.13.6 x86_64)
      at errorFromMJSONWPStatusCode (/Applications/Appium.app/Contents/Resources/app/node_modules/appium/node_modules/appium-base-driver/lib/protocol/errors.js:789:10)
      at ProxyRequestError.getActualError (/Applications/Appium.app/Contents/Resources/app/node_modules/appium/node_modules/appium-base-driver/lib/protocol/errors.js:683:14)
      at asyncHandler$ (/Applications/Appium.app/Contents/Resources/app/node_modules/appium/node_modules/appium-base-driver/lib/protocol/protocol.js:400:25)
      at tryCatch (/Applications/Appium.app/Contents/Resources/app/node_modules/appium/node_modules/babel-runtime/regenerator/runtime.js:67:40)
      at GeneratorFunctionPrototype.invoke [as _invoke] (/Applications/Appium.app/Contents/Resources/app/node_modules/appium/node_modules/babel-runtime/regenerator/runtime.js:315:22)
      at GeneratorFunctionPrototype.prototype.(anonymous function) [as throw] (/Applications/Appium.app/Contents/Resources/app/node_modules/appium/node_modules/babel-runtime/regenerator/runtime.js:100:21)
      at GeneratorFunctionPrototype.invoke (/Applications/Appium.app/Contents/Resources/app/node_modules/appium/node_modules/babel-runtime/regenerator/runtime.js:136:37)
      at <anonymous>
  ./features/pages/Home/Home_Page/P1_HomePage.rb:20:in `verificar_pagina'
  ./features/step_definitions/Home/Home_Chile/SD1_Home.rb:17:in `"Verificar Portal abierto"'
  features/features/Pruebas_Mobile/CL_Mobile.feature:4:in `And Verificar Portal abierto'

那是./features/pages/Home/Home_Page/P1_HomePage.rb:20里面的代码

def verificar_pagina
      @caja_busqueda.wait_until_present
      if @caja_busqueda.present?
        puts "Portal abierto satisfactoriamente con: " + $navegador
      end
  end

移动版chrome打开我的网址,然后出现这个错误。请我尝试一切,我接受建议

我手动设置了appium chromedriver路径并使用它。查看 appium 日志会显示以下内容以及更多详细信息:

[JSONWP Proxy] Got response with status 200: {"sessionId":"d8b3f057fdc1e6e20a0007f9ed920514","status":13,"value":{"message":"unknown error: Argument to isShown must be of type Element\n  (Session info: chrome=69.0.3497.100)\n  (Driver info: chromedriver=2.43.600229 (3fae4d0cda5334b4f533bede5a4787f7b832d052),platform=Mac OS X 10.13.6 x86_64)"}}
[W3C] Encountered internal error running command: ProxyRequestError: Could not proxy command to remote server. Original error: The request to /wd/hub/session/3345408e-82f9-4f63-b6ec-f82998806f47/execute has failed
[W3C]     at JWProxy.proxy$ (/Applications/Appium.app/Contents/Resources/app/node_modules/appium/node_modules/appium-base-driver/lib/jsonwp-proxy/proxy.js:182:13)
[W3C]     at tryCatch (/Applications/Appium.app/Contents/Resources/app/node_modules/appium/node_modules/babel-runtime/regenerator/runtime.js:67:40)
[W3C]     at GeneratorFunctionPrototype.invoke [as _invoke] (/Applications/Appium.app/Contents/Resources/app/node_modules/appium/node_modules/babel-runtime/regenerator/runtime.js:315:22)
[W3C]     at GeneratorFunctionPrototype.prototype.(anonymous function) [as next] (/Applications/Appium.app/Contents/Resources/app/node_modules/appium/node_modules/babel-runtime/regenerator/runtime.js:100:21)
[W3C]     at GeneratorFunctionPrototype.invoke (/Applications/Appium.app/Contents/Resources/app/node_modules/appium/node_modules/babel-runtime/regenerator/runtime.js:136:37)
[W3C]     at 
[MJSONWP] Matched JSONWP error code 13 to UnknownError
[HTTP] <-- POST /wd/hub/session/3345408e-82f9-4f63-b6ec-f82998806f47/execute/sync 500 110 ms - 1894
[HTTP] 

标签: rubymobilecucumberappiumwatir

解决方案


我以这种方式证明:

require 'watir'
require 'selenium-webdriver'

    server_url = 'http://localhost:4723/wd/hub/'

    capabilities =
    {
    platformName: 'Android',
    platformVersion: '7.0',
    deviceName: 'Android Emulator',
    browserName: 'chrome'
    }


    $driver = Selenium::WebDriver.for(:remote, :desired_capabilities => capabilities, :url => server_url)

    $driver.get "http://www.google.com"

有用!!!

但是当一个看跌期权

$appium_driver = Selenium::WebDriver.for(:remote, :desired_capabilities => capabilities, :url => server_url)
$driver = Watir::Browser.new $appium_driver

然后在我尝试与定位器交互时显示错误。

也许这是 watir 与 selenium 和 appium 之间的冲突,我不知道。很遗憾,因为我有一个关于 Watir 的整个项目制作成网页,我不能在移动设备测试上重用所有这些代码。

任何建议都将被接受


推荐阅读