【问题标题】:Appium, WebDriverAppium, WebDriver
【发布时间】:2018-02-13 18:41:24
【问题描述】:

我是 Appium 的新手。我尝试使用 Appium 在移动设备中执行我的 selenium 脚本。但我收到如下错误

org.openqa.selenium.WebDriverException: 返回值不能 转换为WebElement: {ELEMENT=0.5768692365381867-1}

我使用的代码如下:-

AppiumDriver d;
    @BeforeClass
    public void setUp() throws Exception
    {
        //Set Capabilities
        DesiredCapabilities caps=new DesiredCapabilities();
        caps.setCapability("deviceName", "Celkon A35K Remote");
        caps.setCapability("platformName", "Android");
        caps.setCapability("platformVersion", "4.4.2");
        caps.setCapability("browserName", "Browser");

        d = new AndroidDriver(new URL("http://0.0.0.0:4723/wd/hub"), caps);
        d.manage().timeouts().implicitlyWait(60,TimeUnit.SECONDS);
        d.manage().timeouts().pageLoadTimeout(120,TimeUnit.SECONDS);
    }
@Test
public void testFBLogin() throws Exception
{
    //Load web page
    d.get("https://www.facebook.com/");
    //Enter user name
    d.findElementByName("email").sendKeys("Appium");
    //Enter password
    d.findElementByName("pass").sendKeys("Appium");
    //Click on Login
    d.findElementByName("login").click();
    Thread.sleep(10000);
}
@AfterClass
public void tearDown()
{
    //Close browser
    d.quit();
}`script:

【问题讨论】:

  • 您在哪一行收到此错误?

标签: android automation webdriver appium


【解决方案1】:

下面的代码对你有用,最好在真机上测试。我所做的唯一更改是“caps.setCapability("browserName", "Chrome");"

static AppiumDriver d;
@BeforeClass
public static void setUp() throws Exception
{
    //Set Capabilities
    DesiredCapabilities caps=new DesiredCapabilities();
    caps.setCapability("deviceName", "Celkon A35K Remote");
    caps.setCapability("platformName", "Android");
    caps.setCapability("platformVersion", "6");
    caps.setCapability("browserName", "Chrome");

    d = new AndroidDriver(new URL("http://0.0.0.0:4723/wd/hub"), caps);
    d.manage().timeouts().implicitlyWait(60, TimeUnit.SECONDS);
    d.manage().timeouts().pageLoadTimeout(120,TimeUnit.SECONDS);
}
@Test
public void testFBLogin() throws Exception
{
    //Load web page
    d.get("https://www.facebook.com/");
    //Enter user name
    d.findElementByName("email").sendKeys("Appium");
    //Enter password
    d.findElementByName("pass").sendKeys("Appium");
    //Click on Login
    d.findElementByName("login").click();
    Thread.sleep(10000);
}
@AfterClass
public static void tearDown()
{
    //Close browser
    d.quit();
}

【讨论】:

    【解决方案2】:

    声明 AndroidDriver d; 而不是 AppiumDriver d。

    【讨论】:

      【解决方案3】:

      您能否提供更详细的日志以更好地帮助您?

      根据您提到的代码,我认为您可以这样做

      • 声明 AndroidDriver 不是问题。这应该可以正常工作。
      • 正如一些人已经提到你需要改变

      caps.setCapability("browserName", "Browser");

      caps.setCapability("browserName", "Chrome");

      Saucelabs 在这里有很好的文档-https://wiki.saucelabs.com/display/DOCS/Examples+of+Test+Configuration+Options+for+Website+Tests#ExamplesofTestConfigurationOptionsforWebsiteTests-Mac/OSX/Safari。看看吧

      我在使用“http://0.0.0.0:4723/wd/hub”时遇到问题

      【讨论】:

        【解决方案4】:

        请更换功能:

        caps.setCapability("browserName", "Browser");
        

        通过这个:

        caps.setCapability("browserName", "Chrome");
        

        Appium 团队对此做了一些更改:

        https://github.com/appium/appium/blob/master/docs/en/writing-running-appium/caps.md

         

        【讨论】:

          【解决方案5】:

          使用 caps.setCapability(CapabilityType.BROWSER_NAME, "chrome");

          如果您只想在 Android 设备上运行此脚本,您也可以将 AppiumDriver 替换为 AndroidDriver,否则如果您想在 IOS 和 Android 上运行,请使用 Appium。

          RemoteWebDriver:这个驱动类直接来自上游的 Selenium 项目。这是一个非常通用的驱动程序,其中初始化驱动程序意味着向 Selenium 集线器发出网络请求以启动驱动程序会话。由于 Appium 在客户端-服务器模型上运行,因此 Appium 使用它来初始化驱动程序会话。但是,不建议直接使用 RemoteWebDriver,因为还有其他驱动程序可以提供附加功能或便利功能。

          AppiumDriver:此驱动程序类继承自 RemoteWebDriver 类,但它添加了其他功能,这些功能在通过 Appium 服务器进行的移动自动化测试的上下文中很有用。

          AndroidDriver:此驱动程序类继承自 AppiumDriver,但它添加了其他功能,这些功能在通过 Appium 在 Android 设备上进行移动自动化测试时非常有用。如果您想在 Android 设备或 Android 模拟器上开始测试,请仅使用此驱动程序类。

          IOSDriver:此驱动程序类继承自 AppiumDriver,但它添加了其他功能,这些功能在通过 Appium 在 iOS 设备上进行移动自动化测试时非常有用。如果您想在 iOS 设备或 iOS 模拟器上开始测试,请仅使用此驱动程序类。

          如您所见,司机及其姓名与他们的工作密切相关。初始化驱动时,只能使用 Android 或 IOS 驱动。

          http://discuss.appium.io/t/what-is-the-use-or-difference-between-androiddriver-iosdriver-appiumdriver-and-remote-webdriver/8750/2

          【讨论】:

            【解决方案6】:

            你应该替换

            AppiumDriver d;
            

            有了这个

            AndroidDriver <MobileElement> d;
            

            希望这能解决您的问题。

            【讨论】:

              【解决方案7】:

              通过 Appium 测试移动网络时,请查看 Appium 官方网站:

              (自动化移动网络应用)

              https://appium.io/docs/en/writing-running-appium/web/mobile-web/#android-mobile-web-automation

                DesiredCapabilities capabilities = new DesiredCapabilities();
                capabilities.setCapability(MobileCapabilityType.PLATFORM_NAME, "Android");
                capabilities.setCapability(MobileCapabilityType.PLATFORM_VERSION, "4.4");
                capabilities.setCapability(MobileCapabilityType.DEVICE_NAME, "Android Emulator");
                capabilities.setCapability(MobileCapabilityType.BROWSER_NAME, "Chrome");
              
              //setup the web driver and launch the webview app.
                URL url = new URL("http://127.0.0.1:4723/wd/hub");
                AppiumDriver driver = new AppiumDriver(url, desiredCapabilities);
              
                driver.get("http://saucelabs.com/test/guinea-pig");
                WebElement div = driver.findElement(By.id("i_am_an_id"));
              
                Assert.assertEquals("I am a div", div.getText()); //check the text retrieved matches expected value
                driver.findElement(By.id("comments")).sendKeys("My comment"); //populate the comments field by id.
              
              //close the app.
                driver.quit();
              

              这应该可以解决问题。

              【讨论】:

                【解决方案8】:

                将 browseName 功能更改为 caps.setCapability("browserName", "Chrome"); 本地主机可以是任何东西,但我更喜欢使用http://127.0.0.1:4723/wd/hub

                谢谢, 苏达卡

                【讨论】:

                  【解决方案9】:

                  在定位器中使用 selenium 之前将上下文从原生更改为 webview。

                  How to set context

                  【讨论】:

                    【解决方案10】:

                    请参考下面的代码,它可能有用。

                        static AppiumDriver d;
                        @BeforeClass
                        public static void setUp() throws Exception
                        {
                            //Set Capabilities
                    
                           DesiredCapabilities capabilities = new DesiredCapabilities();
                      capabilities.setCapability(MobileCapabilityType.PLATFORM_NAME, "Android");
                      capabilities.setCapability(MobileCapabilityType.PLATFORM_VERSION, "4.4");
                      capabilities.setCapability(MobileCapabilityType.DEVICE_NAME, "Android Emulator");
                      capabilities.setCapability(MobileCapabilityType.BROWSER_NAME, "Chrome");
                    
                            d = new AppiumDriver(new URL("http://0.0.0.0:4723/wd/hub"), capabilities );
                            d.manage().timeouts().implicitlyWait(60, TimeUnit.SECONDS);
                            d.manage().timeouts().pageLoadTimeout(120,TimeUnit.SECONDS);
                        }
                        @Test
                        public void testFBLogin() throws Exception
                        {
                            //Load web page
                            d.get("https://www.facebook.com/");
                            //Enter user name
                            d.findElementByName("email").sendKeys("Appium");
                            //Enter password
                            d.findElementByName("pass").sendKeys("Appium");
                            //Click on Login
                            d.findElementByName("login").click();
                            Thread.sleep(10000);
                        }
                        @AfterClass
                        public static void tearDown()
                        {
                            //Close browser
                            d.quit();
                        }
                    

                    【讨论】:

                      【解决方案11】:

                      在 Desired Capabilities 添加以下附加功能,

                      capability.setCapability(MobileCapabilityType.NEW_COMMAND_TIMEOUT, "60");
                      

                      【讨论】:

                        【解决方案12】:

                        您需要将 AppiumDriver 变量修改为:

                        AppiumDriver d;

                        这样你就告诉 Appium 你正在搜索一个 WebElement。

                        【讨论】:

                          【解决方案13】:
                          DesiredCapabilities ds = new DesiredCapabilities();
                          ds.setCapability("chromedriverExecutable","E:New folder\\chromedriver.exe");//chrome_driver_path
                          ds.setCapability(MobileCapabilityType.DEVICE_NAME,"samsung SM-M205F");
                          ds.setCapability(MobileCapabilityType.BROWSER_NAME,"Chrome");
                          driver = new AndroidDriver<>(new URL("http://127.0.0.1:4723/wd/hub"),ds);
                          driver.get("https://www.facebook.com/");
                          driver.findElementByName("email").sendKeys("Appium");
                          driver.findElementByName("pass").sendKeys("Appium");
                          driver.findElementByName("login").click();
                          Thread.sleep(10000);
                          

                          【讨论】:

                          • 请不要只发布代码作为答案,还要解释您的代码的作用以及它如何解决问题的问题。带有解释的答案通常更有帮助,质量更高,更有可能吸引投票。
                          猜你喜欢
                          • 2018-11-27
                          • 2018-04-29
                          • 1970-01-01
                          • 2021-05-21
                          • 1970-01-01
                          • 2021-12-15
                          • 2018-11-15
                          • 2015-01-23
                          • 2013-12-21
                          相关资源
                          最近更新 更多