Поскольку я новичок в мобильной автоматизации, я пытался выполнять простые действия, используя 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-клиент 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...




Appium — это не Selenium: они оба реализованы с использованием проводного протокола JSON и имеют похожие API, но не одинаковые:
Поддерживаемые стратегии поиска для собственного приложения для Android:
Таким образом, вы не можете использовать стратегию поиска By.name для сеанса драйвера Android, она не поддерживается.
Чтобы упростить задачу, я предлагаю использовать MobileBy вместо By в нативных тестах Appium: вы получите правильные варианты.
By.name("text") удаляется из Appium v1.5.0 и далее.
Также просто добавить cssSelector стратегию + такие методы, как getAttribute("color/background"), присутствующие в Selenium, не поддерживаются в Appium для нативных приложений, поскольку они не поддерживаются базовой структурой модульного тестирования 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();
Недавно я тоже столкнулся с этой проблемой. Если кто-то хочет знать, вот что я сделал, чтобы решить эту проблему.
Я попробовал этот подход 3 февраля 2020 года и смог успешно выполнить его. Изменение, которое я должен был сделать, это обновить 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();
Я пытаюсь протестировать приложение Hybrid Mobile, написанное с помощью Ionic. У вас есть предложения по этому поводу? Я попытался переключить контекст на Интернет, но я тоже застрял в этом.
Всегда используйте имя класса и текстовое имя для создания 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
Если вы удалили зависимости selenium-java, то как вы использовали DesiredCapabilities? Не могли бы вы поделиться своим кодом, а также файлом pom.xml, пожалуйста?