我试图在混合应用程序中运行测试用例。通过使用WebView,我可以切换到driver.context("WEBVIEW")。
但是在我切换到webview之后,driver.findElement()方法在webview下不执行,它返回Appium服务器中的错误,如下所示。你能帮我解决这个问题吗?
下面是我的测试脚本:
    DesiredCapabilities capabilities = new DesiredCapabilities();
    capabilities.setCapability(CapabilityType.BROWSER_NAME, "");
    capabilities.setCapability("deviceName","066e28s70b115a3b");
    capabilities.setCapability("platformVersion", "4.4.2");
    capabilities.setCapability("platformName","Android");
    capabilities.setCapability("app", "/Users/lin/codes/tester.apk");
    capabilities.setCapability("app-package", "com.test.tester");
    capabilities.setCapability("app-activity", "com.test.tester.myActivity");
    AppiumDriver driver = new AppiumDriver(new URL("http://my.local.address:4723/wd/hub"), capabilities);
     Set<String> contextNames = driver.getContextHandles();
     System.out.println(contextNames.size());
     for (String contextName : contextNames) {
       System.out.println(contextName);
       if (contextName.contains("WEBVIEW")){
         driver.context(contextName);
       }
     }
     Thread.sleep(5000);
     driver.findElement(By.xpath("//div[@class='item item-entrance']/h2[@class='grey-title mb20']")).click();以下代码不工作:
 driver.findElement(By.xpath("//div[@class='item item-entrance']/h2[@class='grey-title mb20']")).click();下面是Appium服务器日志中的错误消息:
info: Available contexts: NATIVE_APP,WEBVIEW_1
info: Responding to client with success: {"status":0,"value":["NATIVE_APP","WEBVIEW_1"],"sessionId":"7dd9ea41-f47c-4466-a108-21ce90284ad1"}
GET /wd/hub/session/7dd9ea41-f47c-4466-a108-21ce90284ad1/contexts 200 50ms - 124b
debug: Appium request initiated at /wd/hub/session/7dd9ea41-f47c-4466-a108-21ce90284ad1/context
debug: Request received with params: {"name":"WEBVIEW_1"}
info: Getting a list of available webviews
debug: executing: "/Users/lin/tools/android-sdk-macosx/platform-tools/adb" -s 066e28s70b115a3b shell "cat /proc/net/unix"
info: ["webview_devtools_remote_20051"]
info: Available contexts: NATIVE_APP,WEBVIEW_1
info: Connecting to chrome-backed webview
info: Creating Chrome session
info: Ensuring Chromedriver exists
info: Killing any old chromedrivers, running: ps -e | grep /Users/lin/codes/appiumGit/appium/build/chromedriver/mac/chromedriver | grep -v grep |grep -e '--port=9515$' | awk '{ print $1 }' | xargs kill -15
info: Successfully cleaned up old chromedrivers
info: Spawning chromedriver with: /Users/lin/codes/appiumGit/appium/build/chromedriver/mac/chromedriver
info: [CHROMEDRIVER] Starting ChromeDriver (v2.10.267517) on port 9515
Only local connections are allowed.
info: Making http request with opts: {"url":"http://my.local.address:9515/wd/hub/session","method":"POST","json":{"sessionId":null,"desiredCapabilities":{"chromeOptions":{"androidPackage":"com.test.tester","androidUseRunningApp":true,"androidDeviceSerial":"066e28s70b115a3b"}}}}
info: Could not connect yet; retrying
info: Making http request with opts: {"url":"http://my.local.address:9515/wd/hub/session","method":"POST","json":{"sessionId":null,"desiredCapabilities":{"chromeOptions":{"androidPackage": "com.test.tester","androidUseRunningApp":true,"androidDeviceSerial":"066e28s70b115a3b"}}}}
info: Didn't get a new command in 60 secs, shutting down...
info: Shutting down appium session...
info: [ADB] Pressing the HOME button
debug: executing: "/Users/lingzhixiang/tools/android-sdk-macosx/platform-tools/adb" -s 066e28s70b115a3b shell "input keyevent 3"
info: Stopping logcat capture
debug: Logcat terminated with code null, signal SIGTERM
info: Cleaning up Chromedriver
info: Killing chromedriver
info: Responding to client with error: {"status":13,"value":{"message":"An unknown server-side error occurred while processing the command. (Original error: socket hang up)","code":"ECONNRESET","origValue":"socket hang up"},"sessionId":"7dd9ea41-f47c-4466-a108-21ce90284ad1"}
POST /wd/hub/session/7dd9ea41-f47c-4466-a108-21ce90284ad1/context 500 60649ms - 270b
info: Chromedriver exited with code null
info: (killed by signal SIGTERM)
info: [BOOTSTRAP] [info] Got data from client: {"cmd":"shutdown"}
info: [BOOTSTRAP] [info] Got command of type SHUTDOWN
info: [BOOTSTRAP] [info] Returning result: {"value":"OK, shutting down","status":0}
info: [BOOTSTRAP] [info] Closed client connection顺便说一句,我从源启动了Appium 1.0.0服务器(>节点appium.js --不重置)。
发布于 2015-06-11 05:00:18
@ xlzdew请将driver.context("WEBVIEW")改为driver.context("WEBVIEW_1")
发布于 2019-03-04 09:50:24
你的日志说它不能在你的设备上启动铬驱动器。所以请检查发色器
/Users/lin/codes/appiumGit/appium/build/chromedriver/mac/chromedriver
是否工作,或者它需要执行权限。您可以使用一些铬驱动程序命令来测试它。
发布于 2014-10-08 21:58:10
我相信,当您在WebView中时,使用xpath查找元素是行不通的。找到我成功使用过的元素的唯一方法是By.CSS_SELECTOR和元素类(.menu-item)。
http://appium.io/slate/en/v1.2.0/?java#automating-hybrid-android-apps
https://stackoverflow.com/questions/23808533
复制相似问题