Appium,W​​ebDriver

问题描述:

我是Appium的新手。我尝试使用Appium在移动设备上执行我的硒脚本。但我得到了像下面Appium,W​​ebDriver

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: 
+0

在哪一行,你得到这个错误? –

请替换容量:

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

本:

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

Appium队没有关一些变化:

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

 

声明AndroidDriver d;而不是AppiumDriver d。

使用 caps.setCapability(CapabilityType.BROWSER_NAME, “铬”);

您也可以替换AppiumDriver到AndroidDriver如果你的目的只是为了运行在Android设备上该脚本,否则,如果你想在iOS和Android都请使用Appium运行。

RemoteWebDriver:此驱动程序类从上游硒项目直接来了。这是一个非常通用的驱动程序,初始化驱动程序意味着向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

此时应更换

AppiumDriver d; 

有了这个

AndroidDriver <MobileElement> d; 

希望这将解决您的问题。

下面的代码将为您工作,更好地测试真实设备。我所做的唯一改变是“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(); 
} 

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

根据您所提到的代码,这是我能想到的,你可以做

  • 声明AndroidDriver是没有问题的。这应该照原样工作。
  • 正如有些人已经提到你需要更改

caps.setCapability( “browserName”, “浏览器”);

caps.setCapability( “browserName”, “浏览器”);

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

希望这有助于问题。

-Raj

http://www.testim.io

的Twitter:https://twitter.com/epsilon11