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

由于我是移动自动化的新手,我一直在尝试使用 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}

jeck猫
浏览 258回答 4
4回答

眼眸繁星

Appium 不是 Selenium:它们都使用 JSON 有线协议实现并且具有相似的 API,但并不相同:原生安卓应用支持的定位器策略:id(resource-id 查看属性);accessbilityId(内容描述视图属性);uiAutomator (更好地阅读UiSelector);className(UI 组件类型);XPath。因此,您不能By.name对 Android 驱动程序会话使用定位器策略,它不受支持。为方便起见,我建议在 Appium 原生测试中使用MobileBy代替By:您将获得正确的选项。

largeQ

我在 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"));&nbsp; &nbsp;two.click();

青春有我

By.name("text")从此被删除Appium v1.5.0。此外,Appium 不支持原生应用程序中不支持cssSelector像 Selenium 中存在的策略 + 方法,因为 Android 的底层单元测试框架不支持这些方法,即.getAttribute("color/background")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();

当年话下

始终使用类名和文本名来创建 xpath。const loginbutton=await driver.$("//android.widget.TextView[@text='login']")await loginbutton.click()驱动来自能力class name --> android.widget.TextViewtext name -->login所以总是使用类名和文本名来创建一个更好更好的 xpath。适用于所有 android+appium+wdio
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java