Locator Strategy 'css selector' is not supported for this session issue with appium

百般思念 提交于 2019-12-23 02:29:32

问题


Since I'm new to mobile automation, I've been trying to run simple activities using appium maven and eclipse. But When I try to run Calculator app opens but the elements are not accessible.

This the code I used to run a simple calculator

  @BeforeClass
 public void setUp() throws MalformedURLException {

    DesiredCapabilities capabilities = new DesiredCapabilities();
    capabilities.setCapability("BROWSER_NAME", "Android");
    capabilities.setCapability("VERSION", "4.4.2");
    capabilities.setCapability("deviceName", "Emulator");
    capabilities.setCapability("platformName", "Android");

    capabilities.setCapability("appPackage", "com.android.calculator2");

    capabilities.setCapability("appActivity", "com.android.calculator2.Calculator");

    driver = new RemoteWebDriver(new URL("http://0.0.0.0:4723/wd/hub"), capabilities);
}

@Test
public void testCal() throws Exception {

    WebElement two = driver.findElement(By.name("2"));
    two.click();

}

@AfterClass
public void teardown() {

}

I am using the latest stable dependencies. io.appium java-client 7.0.0 and org.testng testng 6.14.3

FAILED: testCal
org.openqa.selenium.InvalidSelectorException: Locator Strategy 'css 
selector' is not supported for this session
For documentation on this error, please visit: 
https://www.seleniumhq.org/exceptions/invalid_selector_exception.html
Driver info: org.openqa.selenium.remote.RemoteWebDriver
Capabilities {BROWSER_NAME: Android, VERSION: 4.4.2, appActivity: 
com.android.calculator2.Cal..., appPackage: com.android.calculator2, 
databaseEnabled: false, desired: {BROWSER_NAME: Android, VERSION: 4.4.2, 
appActivity: com.android.calculator2.Cal..., appPackage: 
com.android.calculator2, deviceName: Emulator, platformName: android}, 
deviceManufacturer: HUAWEI, deviceModel: FLA-LX2, deviceName: 
HXT7N18521000819, deviceScreenSize: 1080x2160, deviceUDID: 
HXT7N18521000819, javascriptEnabled: true, locationContextEnabled: false, 
networkConnectionEnabled: true, platform: LINUX, platformName: LINUX, 
platformVersion: 8.0.0, takesScreenshot: true, warnings: {}, 
webStorageEnabled: false}
Session ID: a604a166-3c0d-4e9c-a3e4-9b1ea734bee6
*** Element info: {Using=name, value=2}
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(Unknown Source)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown 
Source)
at java.lang.reflect.Constructor.newInstance(Unknown Source)
at...

回答1:


Appium is not Selenium: they both implemented using JSON wire protocol and has similar APIs, but not the same ones:

Supported locator strategies for Native android app:

  • id (resource-id View attribute);
  • accessbilityId (content-desc View attribute);
  • uiAutomator (better to read about UiSelector);
  • className (ui component type);
  • XPath.

So you cannot use By.name locator strategy for Android driver session, it's not supported.

To make it easy, I suggest using MobileBy in place of By in Appium native tests: you will get the proper options.




回答2:


By.name("text") is removed from Appium v1.5.0 onwards.

Also just to add cssSelector strategy + methods like getAttribute("color/background") present in Selenium are not supported in Appium for native apps as these are not supported by underlying unit testing framework of Android i.e. UIAutomator.

You can use below options for clicking digits of calculator

driver.findElement(By.id(“com.android.calculator2:id/digit5”)).click();
driver.findElement(By.xpath(“//android.widget.Button[contains(@resource-id,'digit5') and @text='5']”)).click();
driver.findElementByAccessibilityId(“plus”).click();
driver.findElement(By.xpath(“//android.widget.Button[@text='5']”)).click();


来源:https://stackoverflow.com/questions/54861110/locator-strategy-css-selector-is-not-supported-for-this-session-issue-with-app

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!