2017-09-05 61 views
3

我是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

在哪一行,你得到這個錯誤? –

回答

1

聲明AndroidDriver d;而不是AppiumDriver d。

0

使用 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

0

此時應更換

AppiumDriver d; 

有了這個

AndroidDriver <MobileElement> d; 

希望這將解決您的問題。

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(); 
} 
1

請問您能否提供更詳細的日誌以更好地幫助您?

根據您所提到的代碼,這是我能想到的,你可以做

  • 聲明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