【问题标题】:How can I use selenium or appium to automate chrome browser on android?如何使用 selenium 或 appium 在 android 上自动化 chrome 浏览器?
【发布时间】:2014-02-20 14:19:29
【问题描述】:

我正在尝试在 android 设备(不仅仅是 webview 或其他浏览器,而是 Chrome 浏览器)上自动化 android Chrome 浏览器。我认为通过此链接https://sites.google.com/a/chromium.org/chromedriver/getting-started/getting-started---android 可以做到这一点,但它会自动执行我的 pc chrome 浏览器。

我也试过Appium,但是log之后什么都没有发生:

debug: executing: adb install C:\Users\hidden\Downloads\AppiumForWindows-0.14.2\
Appium\node_modules\appium\build\unlock_apk\unlock_apk-debug.apk

当我尝试从浏览器访问信息时,我得到了这个:

info: Responding to client with error: {"status":13,"value":{"message":"An unkno
wn server-side error occurred while processing the command.","origValue":"Did no
t successfully proxy server command"},"sessionId":"666c9e4f-7653-487a-b299-959d4
000ca79"}

我的环境变量 PATH 中确实有 chromedriver.exe,整个日志如下所示:

info: Welcome to Appium v0.14.2
info: Appium REST http interface listener started on 127.0.0.1:5555
   info  - socket.io started
debug: Appium request initiated at /wd/hub/session
debug: Request received with params: {"desiredCapabilities":{"platform":"ANDROID
","app":"chrome","browserName":"android","browserConnectionEnabled":true,"app-pa
ckage":"com.android.chrome","device":"android","rotatable":true,"app-activity":"
com.google.android.apps.chrome.Main","takesScreenshot":true,"version":""}}
info: Looks like we want chrome on android
info: Creating new appium session 666c9e4f-7653-487a-b299-959d4000ca79
info: Ensuring Chromedriver exists
debug: Pushing unlock helper app to device...
debug: executing: adb install C:\Users\hidden\Downloads\AppiumForWindows-0.14.2\
Appium\node_modules\appium\build\unlock_apk\unlock_apk-debug.apk
warn:  killed=false, code=1, signal=null
debug: Appium request initiated at /wd/hub/status
debug: Request received with params: {}
debug: Proxying command to 127.0.0.1:9515
info: Making http request with opts: {"url":"http://127.0.0.1:9515/wd/hub/status
","method":"GET"}
info: Responding to client with error: {"status":13,"value":{"message":"An unkno
wn server-side error occurred while processing the command.","origValue":"Did no
t successfully proxy server command"},"sessionId":"666c9e4f-7653-487a-b299-959d4
000ca79"}
GET /wd/hub/status 500 1014ms - 238b
POST /wd/hub/session 200 31311ms

谢谢。

【问题讨论】:

  • 你在安卓设备的开发者选项中开启USB调试了吗?
  • 是的,我有。我可以很好地自动化 selendroid 浏览器。我认为使用 selenium 自动化 chrome 浏览器是不可能的。我最终只创建了一个带有 webview 的 4.4 项目,并使用检测工具将 chrome pc 工具连接到我的设备。
  • 有趣,Chrome 浏览器当然可以自动化(我已经通过遥测完成了),但我还没有通过 Selenium 测试过
  • 谢谢,我来看看遥测。

标签: android google-chrome selenium appium


【解决方案1】:

调试:执行:adb install C:\Users\hidden\Downloads\AppiumForWindows-0.14.2\ Appium\node_modules\appium\build\unlock_apk\unlock_apk-debug.apk

如果这里没有发生任何事情,那么您必须重新启动您的 ARM 模拟器和 appium 服务器/chromedriver。我多次遇到这种情况,并注意到很多次 adb 关闭并失去连接。如果我重新启动 abd,一切都会开始工作。这只是一个安装apk的adb命令,需要时间取决于apk的大小,但不会太多。

public static void main(String[] args) throws MalformedURLException{
    DesiredCapabilities  capabilities = new DesiredCapabilities();
    capabilities.setCapability("device","Android");
    capabilities.setCapability("app", "Chrome");
    capabilities.setCapability(CapabilityType.BROWSER_NAME, "");
    capabilities.setCapability(CapabilityType.VERSION, "4.3");
    capabilities.setCapability(CapabilityType.PLATFORM, "WINDOWS");
    WebDriver driver = new RemoteWebDriver(new URL("http://127.0.0.1:4723/wd/hub"), capabilities);
    driver.get("http://www.yahoo.com");
}

我有这段代码在 appium 自动化 android chrome 浏览器上运行良好。在上面的日志中,你的 chromedriver 没有成功启动,所以浏览器没有自动化。我有自动化 chrome 浏览器的 appium 日志: 此外,ChromeDriver 和 Chrome APK 的每种组合都不起作用。这几天我一直在苦苦挣扎,发现: Chrome 驱动程序 2.3 和 Chrome APK 29.xxx 是兼容的。 Chrome 驱动程序 2.9/2.8 和 Chrome APK 30.xx 或 31.xx 无法正常工作。

仅关于 ChromeDriver: 如果您没有设置功能,您提到的铬链接将使 PC 浏览器自动化。像这样的:

DesiredCapabilities capabilities=new DesiredCapabilities();//DesiredCapabilities.chrome();
    ChromeOptions options=new ChromeOptions();
    options.setExperimentalOptions("androidPackage", "com.android.chrome");
    capabilities.setCapability(ChromeOptions.CAPABILITY, options);

如果您只是使用 chromedriver(而不是 appium),则必须设置此功能。 我正在为此努力,但找不到该功能。 此外,您必须自己在命令提示符上启动 ChromDriver,它将在 9515 端口侦听任何自动化。

【讨论】:

  • 谢谢。我最终在 4.4 android 中创建了自己的 webview,可以连接到 chrome 工具。我确信这是可行的,因为我看到了你刚刚放在其他网站上的相同日志,但对我来说,它只是在 unlock_apk-debug.apk 冻结。重新启动 adb 没有帮助。另外,我用的是手机,不是模拟器。
  • 如果您的 appium 日志在解锁时冻结...语句,您可能连接了多个设备...您也可以简单地使用任意 apk 文件单独执行此命令以检查问题所在用你的亚行。
  • 也许在设备的设置/开发者选项中禁用“通过 USB 进行应用验证”可能会有所帮助?不止一种设备(真实或模拟器)可能会导致问题
【解决方案2】:

1) 阅读 appium 日志,看看它指的是哪个版本的 chrome 驱动程序。 2) 在线查看最新的 chromedriver 版本。 截至今天,最新版本是 2.23。为 Windows 下载这个并解压 http://chromedriver.storage.googleapis.com/index.html?path=2.23/ 3)升级Appium(今天最新-1.4.16.1) 现在到这个位置, C:\Program Files (x86)\Appium\node_modules\appium\node_modules\appium-chromedriver\chromedriver\win

并在此处粘贴 chromedriver.exe。(替换旧的)

4)

    public AndroidDriver<AndroidElement> startChrome() {
        DesiredCapabilities capabilities = new DesiredCapabilities();

        capabilities.setCapability("deviceName", "AndroidDevice");
        capabilities.setCapability("newCommandTimeout", 180);
        capabilities.setCapability("appActivity", "com.google.android.apps.chrome.Main");

        try {
            driver = new AndroidDriver<>(new URL(appiumURL), capabilities);
driver.get("google.com")
        } catch (MalformedURLException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }       return driver;
    }

5) 如果这不起作用,请务必检查 appium 日志,如果它指向更新的 chrome 版本

【讨论】:

    【解决方案3】:

    首先检查您的移动设备是否与chrome浏览器连接。 在 Web 浏览器 url 上键入以下命令

    chrome://inspect/devices#devices
    

    这将显示已连接设备的列表。

    然后设置所需的功能。

    下面是为我工作的代码:

    public void setUp() {
        File app = new File("./TestingAPK/app-release-v3.1.0-c20170201.apk");
        DesiredCapabilities capabilities = new DesiredCapabilities();
        capabilities.setCapability(CapabilityType.BROWSER_NAME, "Chrome");
        capabilities.setCapability(MobileCapabilityType.PLATFORM_NAME, MobilePlatform.ANDROID);
        capabilities.setCapability("deviceName", "emulator-5554");
        capabilities.setCapability("unicodekeyboard", true);
        capabilities.setCapability("resetkeyboard", true);
        capabilities.setCapability(MobileCapabilityType.PLATFORM_VERSION, "21");
        capabilities.setCapability("appPackage", "app.mangalam.billboy");
        capabilities.setCapability("appActivity", "app.mangalam.billboy.main.SplashActivity");
    
        capabilities.setCapability("app", app.getAbsolutePath());
        try {
            driver = new AndroidDriver < > (new URL("http://127.0.0.1:4723/wd/hub"), capabilities);
        } catch (MalformedURLException e) {
            e.printStackTrace();
        }
        driver.manage().timeouts().implicitlyWait(90, TimeUnit.SECONDS);
    }
    

    【讨论】:

      【解决方案4】:

      我是这样设置的,效果很好。

            String appium_node = ("http://0.0.0.0:4723/wd/hub");
      
          //Set the Desired Capabilities
          DesiredCapabilities caps = new DesiredCapabilities();
          caps.setCapability("deviceName", "Mi Android Phone");
          caps.setCapability("udid", "ba689af30404"); //Give Device ID of your mobile phone
          caps.setCapability("platformName", "Android");
          caps.setCapability("platformVersion", "8.1.0");
          caps.setCapability("browserName", "Chrome");
          caps.setCapability("noReset", true);
          caps.setCapability("unicodekeyboard", true);
          caps.setCapability(MobileCapabilityType.PLATFORM_NAME, MobilePlatform.ANDROID);
      
          try {
              driver = new AndroidDriver < > (new URL(appium_node), caps);
          } catch (MalformedURLException e) {
              e.printStackTrace();
          }
          driver.manage().timeouts().implicitlyWait(90, TimeUnit.SECONDS);
      
      }
      

      【讨论】:

        【解决方案5】:

        这让我在最新的 Appium 1.10 中启动了 chrome 浏览器

        package com.prac.com;
        
        import java.net.MalformedURLException;
        import java.net.URL;
        import java.util.concurrent.TimeUnit;
        
        import org.openqa.selenium.remote.CapabilityType;
        import org.openqa.selenium.remote.DesiredCapabilities;
        
        import io.appium.java_client.android.AndroidDriver;
        
        public class Demo1LaunchChrome {
        
            private static AndroidDriver driver;
            public static void main(String[] args) throws MalformedURLException, InterruptedException{
                // TODO Auto-generated method stub
        
                DesiredCapabilities cap = new DesiredCapabilities();
                cap.setCapability(CapabilityType.BROWSER_NAME, "Chrome");
                cap.setCapability("deviceName", "emulator demo1");
                cap.setCapability("platformVersion", "8.0.0");
                cap.setCapability("platformName", "Android");
        
                System.setProperty("webdriver.chrome.driver", "C:\\Appium Jars\\chromedriver_win32\\chromedriver");
                Thread.sleep(10000);
                driver = new AndroidDriver(new URL("http://0.0.0.0:4723/wd/hub"), cap);
                Thread.sleep(10000);
                driver.get("https://hobbyclues.in");
                 Thread.sleep(10000);
                 System.out.println("Done!");
                 driver.quit();
        
            }
        
        }
        

        【讨论】:

          【解决方案6】:

          以下几点需要补充:-

          1) 添加 chromedriverExecutable 功能并给出 chromeDriver.exe 的路径

          2) 编写代码,将 Native_App 切换到 WEBVIEW。

          public static void applaunch() throws MalformedURLException, InterruptedException
              {
                  DesiredCapabilities capabilites = new DesiredCapabilities();
          
                  capabilites.setCapability(MobileCapabilityType.DEVICE_NAME, "MyDevice");
                  capabilites.setCapability(MobileCapabilityType.UDID, "112udid12");
                  capabilites.setCapability(MobileCapabilityType.PLATFORM_NAME, "android");
                  capabilites.setCapability(MobileCapabilityType.PLATFORM_VERSION, "9");
                  capabilites.setCapability("chromedriverExecutable", "C:/path/Of/chromedriver.exe");
                  capabilites.setCapability(AndroidMobileCapabilityType.APP_PACKAGE ,"com.android.chrome");
                  capabilites.setCapability(AndroidMobileCapabilityType.APP_ACTIVITY ,"com.google.android.apps.chrome.Main");
                  capabilites.setCapability("noReset", true);
          
          
                   AppiumDriver<MobileElement> driver= new AppiumDriver<MobileElement>(new URL("http://127.0.0.1:4725/wd/hub") ,capabilites); 
                  driver.get("https://www.facebook.com/");
                  driver.manage().timeouts().implicitlyWait(20, TimeUnit.SECONDS);
                  Thread.sleep(5000);     
          
                  //We use Set<String> views to get all context values.
                  //And then navigate Native_APP to WEBVIEW_chrome.
          
                  Set<String> views = driver.getContextHandles();
                  for (String view :views)
                  {
                      System.out.println("View is :- "+view);
                      if(view.contains("WEBVIEW_chrome"))
                      {
                          driver.context(view);
                          break;
          
                      }
          
                  }
          
                  driver.findElement(By.xpath("userID")).sendKeys("UserOne@gmail.com");
                  driver.findElement(By.xpath("Password")).sendKeys("MyPassword");
                  driver.findElement(By.xpath("LoginBtn")).click();
          

          【讨论】:

          • 您的答案没有在原始答案中添加任何内容,您能解释一下您的答案比实际接受的答案更好吗?
          猜你喜欢
          • 2014-03-25
          • 2019-02-09
          • 2015-03-28
          • 2014-11-28
          • 2021-08-19
          • 1970-01-01
          • 2015-12-10
          • 2018-10-30
          • 1970-01-01
          相关资源
          最近更新 更多