Ответ 1
Идентификатор элемента можно использовать следующим образом: -
имя пакета: com.example.testap
Элемент ID: txtLogin
напишите следующий код -
driver.findElement(By.id("com.example.testapp:id/txtLogin")).sendKeys("abc");
в следующей ссылке упоминается, что мы можем найти элемент, указав id... но я не могу его найти.
https://github.com/appium/appium/blob/master/docs/en/writing-running-appium/finding-elements.md
найти по "имени" (т.е. текст, метку или сгенерированный разработчиком идентификатор a.k.a 'accessibilityIdentifier' элемента)
Я пробовал следующий код:
WebElement el = driver.findElement(By.name("txtLogin"));
где txtLogin является id для кнопки входа в систему
он дает следующее исключение:
org.openqa.selenium.NoSuchElementException: An element could not be located on the page using the given search parameters. (WARNING: The server did not provide any stacktrace information)
может понравиться кому-нибудь объяснить, какие способы найти элементы в appium
Идентификатор элемента можно использовать следующим образом: -
имя пакета: com.example.testap
Элемент ID: txtLogin
напишите следующий код -
driver.findElement(By.id("com.example.testapp:id/txtLogin")).sendKeys("abc");
Вы можете найти по id, используя Xpath, например.
здесь элемент имеет class= "android.widget.Button" и id = "digit5", поэтому вы можете найти как
xpath("//android.widget.Button[contains(@resource-id,'digit5')]")
Xpath наиболее полезен, если вы хотите применить множественное условие как
xpath("//android.widget.Button[contains(@resource-id,'digit5') and @text='5']")
более подробную информацию вы можете найти на http://www.software-testing-tutorials-automation.com/2015/10/ui-automator-viewer-get-android-app.html
Вот код jave с наиболее распространенными способами поиска элементов с помощью Appium
//Find element by id and enter Hello in Text box.
driver.findElementById("edit_name").sendKeys("Hello");
//Find element by class name and enter Hello in Text box.
driver.findElementByClassName("com.android.EditText").sendKeys("Hello");
//Find element by xpath and enter Hello in Text box.
driver.findElementByXPath("//cass[@value='Enter Name']").sendKeys("Hello");
//Find element by link text and enter Hello in Text box.
driver.findElementByLinkText("Enter Name").sendKeys("Hello");
Если вы хотите узнать больше способов поиска элементов в appium для собственных и веб-просмотров ПОСЕТИТЕ ЗДЕСЬ
Получение элемента по идентификатору невозможно для уровня API Android менее 18. Возможно, вы проверяете uiautomatorviewer, если он присутствует. Если нет, вы можете получить все элементы типа EditView и перебрать его, чтобы найти правильное поле для отправки текста.
Используйте его таким образом -
public List<WebElement> getWebElementList(By by) {
return driver.findElements(by);
}
public void details() throws InterruptedException{
List<WebElement> weList = null;
weList = getWebElementList(By.tagName("android.widget.EditView"));
for (WebElement we : weList) {
if(we.getText().toLowerCase().contains("login")){
we.sendkeys("Hello");
}
}
}
Надеюсь, что это поможет.
В версии Appium 1.0 и далее findElementByTagName устарел.
Вместо этого вы должны использовать findElementByClassName с квалифицированным именем класса. Код для EditTextField и Button в android, как показано ниже:
findElements (By.className( "android.widget.EditText" ));
findElements (By.className( "android.widget.Button" ));
Идентификатор элемента можно найти с помощью андроида uiautomatorviewer. просто перейдите в папку инструментов SDK D:\Android\android-sdk\tools, здесь вы можете найти uiautomatorviewer. Откройте его и сделайте снимки экрана вашей активности и найдите идентификатор, класс, пакет любого элемента.