Appium 【没有完全解决,12 个元素,第二三个为空,其它能找到】小女子困扰好久 Android Xpth 获取元素全部为 0

nearly · 2014年05月06日 · 最后由 nearly 回复于 2014年05月06日 · 2050 次阅读

这个是我的测试环境

想用 XPath 定位 text=OS

(java)assertEquals("OS", els.get(8).getText()); 能找到’OS'。用 debug 调试,下面所有 size 都等于 0。
int i;
i= -1;
//i = driver.findElements(By.xpath("//")).size();
i = driver.findElements(By.xpath("//
[@clickable=true]")).size();
i = driver.findElements(By.xpath("text[@text=OS]")).size();
i = driver.findElements(By.xpath("//text[@text=OS]")).size();
i = driver.findElements(By.xpath("text[@text='OS']")).size();
i = driver.findElements(By.xpath("//text[@text='OS']")).size();

i = driver.findElements(By.xpath("TextView[@text=OS]")).size();
i = driver.findElements(By.xpath("//TextView[@text=OS]")).size();
i = driver.findElements(By.xpath("TextView[@text='OS']")).size();
i = driver.findElements(By.xpath("//TextView[@text='OS']")).size();

i = driver.findElements(By.xpath("//FrameLayout/View/FrameLayout/ListView/TextView[@text=OS]")).size();
i = driver.findElements(By.xpath("//FrameLayout/View/FrameLayout/ListView/TextView[@text='OS']")).size();
i = driver.findElements(By.xpath("//FrameLayout/ListView/TextView[@text=OS]")).size();
i = driver.findElements(By.xpath("//FrameLayout/ListView/TextView[@text='OS']")).size();

i = driver.findElements(By.xpath("//frame/view/frame/list/text[@text=OS]")).size();
i = driver.findElements(By.xpath("//frame/view/frame/list/text[@text='OS']")).size();
i = driver.findElements(By.xpath("//frame/list/text[@text=OS]")).size();
i = driver.findElements(By.xpath("//frame/list/text[@text='OS']")).size();
i = driver.findElements(By.xpath("//frame/list/text[0]")).size();
i = driver.findElements(By.xpath("//frame/list/text[1]")).size();

i = driver.findElements(By.xpath("//FrameLayout[1]/View[1]/FrameLayout[1]/ListView[1]/TextView[@text=OS]")).size();
i = driver.findElements(By.xpath("//FrameLayout[1]/View[1]/FrameLayout[1]/ListView[1]/TextView[@text='OS']")).size();
i = driver.findElements(By.xpath("//FrameLayout[1]/ListView[1]/TextView[@text=OS]")).size();
i = driver.findElements(By.xpath("//FrameLayout[1]/ListView[1]/TextView[@text='OS']")).size();

i = driver.findElements(By.xpath("//frame[1]/view[1]/frame[1]/list[1]/text[@text=OS]")).size();
i = driver.findElements(By.xpath("//frame[1]/view[1]/frame[1]/list[1]/text[@text='OS']")).size();
i = driver.findElements(By.xpath("//frame[1]/list[1]/text[@text=OS]")).size();
i = driver.findElements(By.xpath("//frame[1]/list[1]/text[@text='OS']")).size();

其中 i = driver.findElements(By.xpath("//*")).size();直接报出。

请问哪里出了问题吗?困扰好久。坐等!

用了 full class 后

driver.findElements(By.xpath("//android.widget.TextView"));

共收到 7 条回复 时间 点赞

driver.findElements(By.xpath("//text[@text='OS']"))
这个应该是找到的.

你可以试试 driver.findElements(By.xpath("//text")) 打印下找到的每个元素的 text 是多少

还是找不到
#1 楼 @seveniruby

driver.findElements(By.xpath("//text[@text='OS']")).size();
//String strtest = testList.get(0).getAttribute("text");
driver.findElements(By.xpath("//text")).size(); 

由于两个 size()都是 0,所有中间那行报错。是不是我的设备还是环境版本有问题,XPath 没有一个成功的。

如下是全部的代码,i 都是=0,XPath 在我的代码里面没有成功获取过

package com.saucelabs.appium;

import org.apache.commons.io.FileUtils;
import org.apache.http.HttpEntity;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.entity.StringEntity;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.util.EntityUtils;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import org.openqa.selenium.*;
import org.openqa.selenium.interactions.HasTouchScreen;
import org.openqa.selenium.interactions.TouchScreen;
import org.openqa.selenium.remote.CapabilityType;
import org.openqa.selenium.remote.DesiredCapabilities;
import org.openqa.selenium.remote.RemoteTouchScreen;
import org.openqa.selenium.remote.RemoteWebDriver;
import org.openqa.selenium.remote.RemoteWebElement;
import org.openqa.selenium.support.ui.ExpectedConditions;
import org.openqa.selenium.support.ui.WebDriverWait;

import com.google.gson.JsonParser;
import java.io.File;
import java.io.IOException;
import java.net.URL;
import java.text.SimpleDateFormat;
import java.util.List;
import java.util.HashMap;
import java.util.Date;
import java.util.concurrent.TimeUnit;

import static org.junit.Assert.assertEquals;

public class AndroidTest {

    private static WebDriver driver;
    private static JavascriptExecutor js;
    private static WebDriverWait driverWait;

    @Before
    public void setUp() throws Exception {
        File classpathRoot = new File(System.getProperty("user.dir"));
        File appDir = new File(classpathRoot, "apps");
        File app = new File(appDir, "api.apk");
        DesiredCapabilities capabilities = new DesiredCapabilities();
        capabilities.setCapability("device","Android");
        capabilities.setCapability(CapabilityType.BROWSER_NAME, "");
        capabilities.setCapability(CapabilityType.VERSION, "4.3");
        capabilities.setCapability(CapabilityType.PLATFORM, "WINDOWS");
        capabilities.setCapability("app", app.getAbsolutePath());
        capabilities.setCapability("app-package", "io.appium.android.apis");
        capabilities.setCapability("app-activity", ".apis");
        driver = new SwipeableWebDriver(new URL("http://127.0.0.1:4723/wd/hub"), capabilities);
    }

    @After
    public void tearDown() throws Exception {
        driver.quit();
    }

    @Test
    public void apiDemo(){
        WebElement el;
        el = driver.findElement(By.name("OS"));
        List<WebElement> els = driver.findElements(By.className("android.widget.TextView"));
        assertEquals("OS", els.get(8).getText()); 
        int i;
        i= -1;
        //i = driver.findElements(By.xpath("//*")).size();
        i = driver.findElements(By.xpath("//*[@clickable=true]")).size();
        i = driver.findElements(By.xpath("text[@text=OS]")).size();
        i = driver.findElements(By.xpath("//text[@text=OS]")).size();
        i = driver.findElements(By.xpath("text[@text='OS']")).size();
        i = driver.findElements(By.xpath("//text[@text='OS']")).size();

        i = driver.findElements(By.xpath("TextView[@text=OS]")).size();
        i = driver.findElements(By.xpath("//TextView[@text=OS]")).size();
        i = driver.findElements(By.xpath("TextView[@text='OS']")).size();
        i = driver.findElements(By.xpath("//TextView[@text='OS']")).size();

        i = driver.findElements(By.xpath("//FrameLayout/View/FrameLayout/ListView/TextView[@text=OS]")).size();
        i = driver.findElements(By.xpath("//FrameLayout/View/FrameLayout/ListView/TextView[@text='OS']")).size();
        i = driver.findElements(By.xpath("//FrameLayout/ListView/TextView[@text=OS]")).size();
        i = driver.findElements(By.xpath("//FrameLayout/ListView/TextView[@text='OS']")).size();

        i = driver.findElements(By.xpath("//frame/view/frame/list/text[@text=OS]")).size();
        i = driver.findElements(By.xpath("//frame/view/frame/list/text[@text='OS']")).size();
        i = driver.findElements(By.xpath("//frame/list/text[@text=OS]")).size();
        i = driver.findElements(By.xpath("//frame/list/text[@text='OS']")).size();
        i = driver.findElements(By.xpath("//frame/list/text[0]")).size();
        i = driver.findElements(By.xpath("//frame/list/text[1]")).size();

        i = driver.findElements(By.xpath("//FrameLayout[1]/View[1]/FrameLayout[1]/ListView[1]/TextView[@text=OS]")).size();
        i = driver.findElements(By.xpath("//FrameLayout[1]/View[1]/FrameLayout[1]/ListView[1]/TextView[@text='OS']")).size();
        i = driver.findElements(By.xpath("//FrameLayout[1]/ListView[1]/TextView[@text=OS]")).size();
        i = driver.findElements(By.xpath("//FrameLayout[1]/ListView[1]/TextView[@text='OS']")).size();

        i = driver.findElements(By.xpath("//frame[1]/view[1]/frame[1]/list[1]/text[@text=OS]")).size();
        i = driver.findElements(By.xpath("//frame[1]/view[1]/frame[1]/list[1]/text[@text='OS']")).size();
        i = driver.findElements(By.xpath("//frame[1]/list[1]/text[@text=OS]")).size();
        i = driver.findElements(By.xpath("//frame[1]/list[1]/text[@text='OS']")).size();
    }

    public static void takeScreenShot(WebDriver driver,String screenShotName)
    {  
       File screenShotFile = ((TakesScreenshot)driver).getScreenshotAs(OutputType.FILE);  
       try {   
          FileUtils.copyFile(screenShotFile, new File("D:\\AutoScreenCapture\\" + getCurrentDateTime()+ "_" + screenShotName + ".jpg"));  
          } 
       catch (IOException e) {e.printStackTrace();}  
    } 
    public static String getCurrentDateTime(){
       SimpleDateFormat df = new SimpleDateFormat("yyyyMMdd_HHmmss");
       return df.format(new Date());
    }

    public class SwipeableWebDriver extends RemoteWebDriver implements HasTouchScreen {
        private RemoteTouchScreen touch;

        public SwipeableWebDriver(URL remoteAddress, Capabilities desiredCapabilities) {
            super(remoteAddress, desiredCapabilities);
            touch = new RemoteTouchScreen(getExecuteMethod());
        }

        public TouchScreen getTouch() {
            return touch;
        }
    }

}







#2 楼 @nearlynie 你的版本号是多少, 你试试其他的几种定位方式. 比如 uiautomator 先确认下其他的定位方式是否可以. 最新版本的 appium 我还没有进行全面的测试.

问题已解决 谢谢

#5 楼 @nearlynie 啥问题造成的呢?

#6 楼 @purpose 你可以下载最新的 appium 版本试试效果

需要 登录 后方可回复, 如果你还没有账号请点击这里 注册