Можем ли мы найти элемент по ID в appium

в следующей ссылке упоминается, что мы можем найти элемент, указав 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

Ответы

Ответ 1

Идентификатор элемента можно использовать следующим образом: -

имя пакета: com.example.testap

Элемент ID: txtLogin

напишите следующий код -

 driver.findElement(By.id("com.example.testapp:id/txtLogin")).sendKeys("abc");

Ответ 2

Вы можете найти по 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

Ответ 3

Вот код 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 для собственных и веб-просмотров ПОСЕТИТЕ ЗДЕСЬ

Ответ 4

Получение элемента по идентификатору невозможно для уровня 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");
            }
        }           
    }

Надеюсь, что это поможет.

Ответ 5

В версии Appium 1.0 и далее findElementByTagName устарел.

Вместо этого вы должны использовать findElementByClassName с квалифицированным именем класса. Код для EditTextField и Button в android, как показано ниже:

findElements (By.className( "android.widget.EditText" ));

findElements (By.className( "android.widget.Button" ));

Ответ 6

Идентификатор элемента можно найти с помощью андроида uiautomatorviewer. просто перейдите в папку инструментов SDK D:\Android\android-sdk\tools, здесь вы можете найти uiautomatorviewer. Откройте его и сделайте снимки экрана вашей активности и найдите идентификатор, класс, пакет любого элемента.

enter image description here