Appium的此会话问题不支持定位器策略“ css选择器”

时间:2019-02-25 07:08:52

标签: java maven selenium testng appium

由于我是移动自动化的新手,所以我一直试图使用appium maven和eclipse运行简单的活动。但是,当我尝试运行“计算器”应用程序时,打开但元素不可访问。

这是我用来运行简单计算器的代码

  @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() {

}

我正在使用最新的稳定依赖项。     io.appium java-client 7.0.0和 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...

5 个答案:

答案 0 :(得分:4)

Appium不是Selenium:它们都是使用JSON Wire协议实现的,并且具有相似的API,但不是相同的API:

本机android应用程序支持的定位器策略:

  • id(资源ID的View属性);
  • accessibilityId(内容描述视图属性);
  • uiAutomator(最好读一下UiSelector);
  • className(ui组件类型);
  • XPath。

因此您不能在Android驱动程序会话中使用By.name定位器策略,这不受支持。

为简便起见,我建议在Appium本机测试中使用MobileBy代替By:您将获得适当的选项。

答案 1 :(得分:1)

By.name("text")Appium v1.5.0开始被删除。

Appium的本机应用程序不支持添加Selenium中存在的cssSelector策略+之类的方法,例如getAttribute("color/background"),因为Android的基础单元测试框架即UIAutomator不支持这些方法。

您可以使用以下选项单击计算器的数字

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

答案 2 :(得分:1)

我在2020年2月3日尝试了这种方法,并且能够成功执行。我要做的更改是将io.appium更新为7.2.0。

我的案例/测试中的必备条件:Windows计算机,创建Nexus S AVD,启动Appium和AVD。

最重要

URL url = new URL("http://127.0.0.1:4723/wd/hub");
driver = new AndroidDriver<MobileElement>(url, capabilities);
MobileElement two =(MobileElement)driver.findElement(By.id("com.android.calculator2:id/digit_9"));   
two.click();

答案 3 :(得分:0)

最近我也遇到了这个问题。如果有人想知道,这是我为解决此问题所做的事情。

  1. 更新了Java客户端。我在pom中将其更新为版本7.2.0。
  2. 删除了selenium-java依赖项。由于Java客户端已经具有selenium依赖关系,因此需要删除它。如果不删除它,可能会导致冲突。
  3. 更新我的maven项目。
  4. 重新运行测试。我只是尝试使用模拟器在计算器应用程序中单击数字5,并且有效

enter image description here

答案 4 :(得分:0)

始终使用类名和文本名来创建 xpath。

const loginbutton=await driver.$("//android.widget.TextView[@text='login']")


await loginbutton.click()

驱动来自能力

class name --> android.widget.TextView

text name -->login

所以总是使用类名和文本名来创建更好更好的 xpath。

适用于所有 android+appium+wdio