今天写robotium脚本发现,用uiautomatorviewer定位百度贴吧的登录框是无法定位的,如图:
明显无法定位用户名、密码输入框,无法定位元素那就无法对控件无法操作
如何定位webview元素?
解决方案:
step:
1、手机连接上电脑,并打开App,打开需要定位的Webview的页面
2、电脑上打开Chrome,地址栏输入 chrome://inspect
3、点击devices标签,此时你会看到你设备上对应的App的包名
ps:必须*链接外网,否则看不到效果
4、点击包名旁边的 inspect ,就会进入chrome的调试工具,在这个调试工具就可以获取
当前webview的所有元素了。
测试百度app登录源码:
package com.example.tieba.test; import org.junit.After;
import org.junit.Before;
import org.junit.Test; import android.os.PowerManager;
import android.test.ActivityInstrumentationTestCase2; import com.robotium.solo.By;
import com.robotium.solo.Solo; public class TestBaiduApp extends ActivityInstrumentationTestCase2 { // 定义变量
private Solo solo;
private static final String packageName = "com.baidu.tieba";
private static final String launchActivityName = "com.baidu.tieba.LogoActivity";
private PowerManager.WakeLock wakeScreenObject = null;
// 定义启动activity类
private static Class<?> loginActivity;
// 通过初始化静态块,加载启动activity
static {
try {
loginActivity = Class.forName(launchActivityName);
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
} public TestBaiduApp() {
super(packageName, loginActivity);
// TODO Auto-generated constructor stub
}
private void init() {
solo = new Solo(getInstrumentation(), getActivity());
solo.scrollToSide(solo.LEFT, 0.9f);
// 唤醒设备
if (wakeScreenObject == null) {
wakeScreenObject = Util.wakeScreen(this);
}
}
@Before
protected void setUp() throws Exception {
super.setUp();
init(); } @After
protected void tearDown() throws Exception {
solo.finishOpenedActivities();
} @Test
public void test() {
assertTrue("如没进入登录页,可能有bug", solo.waitForText("随便看看", 1, 2000));
solo.clickOnText("登录",1);
//webview元素处理
// 输入用户名
solo.clearTextInWebElement(By.id("login-username"));
solo.enterTextInWebElement(By.id("login-username"), username);
// 输入密码
solo.clearTextInWebElement(By.id("login-password"));
solo.enterTextInWebElement(By.id("login-password"), password);
// 点击登录
solo.clickOnWebElement(By.id("login-submit"),1);
solo.sleep(10000);
} }