我们可以在appium中通过ID找到元素

时间:2014-03-03 08:48:48

标签: android appium

以下链接提到我们可以通过给出id来找到元素...但我无法找到它。

https://github.com/appium/appium/blob/master/docs/en/writing-running-appium/finding-elements.md

按“名称”查找(即文本,标签或开发人员生成的ID 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中找到元素的所有方法

6 个答案:

答案 0 :(得分:21)

您可以使用以下元素ID: -

包名:com.example.testap

元素ID:txtLogin

编写以下代码 -

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

答案 1 :(得分:4)

你也可以使用 Xpath 找到id,例如。 enter image description here 这里的元素有 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

答案 2 :(得分:2)

这是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中查找原生和网络视图元素的方法VISIT HERE

答案 3 :(得分:1)

如果Android API级别低于18,则无法通过ID获取元素。如果id存在,您可以检查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");
            }
        }           
    }

希望这有帮助。

答案 4 :(得分:1)

在Appium 1.0版以后,不推荐使用findElementByTagName。

您必须使用findElementByClassName而不是限定类名。 android中EditTextField和Button的代码如下:

findElements(By.className( “android.widget.EditText”));

findElements(By.className( “android.widget.Button”));

答案 5 :(得分:1)

您可以使用android uiautomatorviewer 找到元素的ID。 只需转到SDK工具文件夹D:\ Android \ android-sdk \ tools,在这里你可以找到uiautomatorviewer。 打开它并拍摄活动的屏幕截图,找到任何元素的id,class,package。

enter image description here