toolbar里面的控件无法定位的问题

appium介绍

Appium是一个开源、跨平台的测试框架,可以用来测试原生及混合的移动端应用。Appium支持IOS、Android及FirefoxOS平台。Appium使用WebDriver的json wire协议,来驱动Apple系统的UIAutomation库、Android系统的UIAutomator框架。Appium对IOS系统的支持得益于Dan Cuellar’s对于IOS自动化的研究。Appium也集成了Selendroid,来支持老android版本。
Appium支持Selenium WebDriver支持的所有语言,如java、Object-C、JavaScript、Php、Python、Ruby、C#、Clojure,或者Perl语言,更可以使用Selenium WebDriver的Api。Appium支持任何一种测试框架。如果只使用Apple的UIAutomation,我们只能用javascript来编写测试用例,而且只能用Instruction来运行测试用例。同样,如果只使用Google的UIAutomation,我们就只能用java来编写测试用例。Appium实现了真正的跨平台自动化测试。
appium选择了client-server的设计模式。只要client能够发送http请求给server,那么的话client用什么语言来实现都是可以的,这就是appium及webdriver如何做到支持多语言的。

遇到的问题

toolbar里面的控件无法定位

toolbar里面的控件无法定位的问题_第1张图片
image.png

解决办法

获取坐标

toolbar里面的控件无法定位的问题_第2张图片
image.png

使用坐标定位控件

TouchAction action = new AndroidTouchAction(driver);
action.tap(PointOption.point(x, y)).release().perform();
wechat.gif

完整代码

package examples;

import java.net.URL;
import java.util.concurrent.TimeUnit;

import org.openqa.selenium.By;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.remote.DesiredCapabilities;
import org.openqa.selenium.support.ui.ExpectedConditions;
import org.openqa.selenium.support.ui.WebDriverWait;
import org.testng.annotations.AfterClass;
import org.testng.annotations.Test;

import io.appium.java_client.AppiumDriver;
import io.appium.java_client.MobileElement;
import io.appium.java_client.TouchAction;
import io.appium.java_client.android.AndroidDriver;
import io.appium.java_client.android.AndroidTouchAction;
import io.appium.java_client.touch.offset.PointOption;

public class HomeTest {
    
    private AppiumDriver driver; 

    @Test
    public void f() throws Exception {
        DesiredCapabilities caps = new DesiredCapabilities();
        caps.setCapability("platformName", "Android");
        caps.setCapability("deviceName", "emulator-5554");
        caps.setCapability("platformVersion", "5.1.1");
        caps.setCapability("appPackage", "com.lqm.home");
        caps.setCapability("appActivity", "com.lqm.home.activity.SplashActivity");
        caps.setCapability("noReset", true);//作用:可以免登录
        caps.setCapability("unicodeKeyboard", true);//屏蔽手机上的小键盘
        caps.setCapability("resetKeyboard", true);
        caps.setCapability("automationName","UiAutomator2");
        driver = new AndroidDriver(new URL("http://192.168.1.7:4723/wd/hub"),caps);
        driver.manage().timeouts().implicitlyWait(15, TimeUnit.SECONDS);//设置最大等待时长
        int width = driver.manage().window().getSize().width;
        int x = width - 50;
        int y = 70;
        //System.out.println(x);
        //System.out.println(width);
        TouchAction action = new AndroidTouchAction(driver);
        action.tap(PointOption.point(x, y)).release().perform();
        driver.findElementById("com.lqm.home:id/et_title").sendKeys("测试虾到此一游");
        driver.findElementById("com.lqm.home:id/et_content").sendKeys("测试虾到此一游"+System.currentTimeMillis());
        driver.findElementById("com.lqm.home:id/tv_submit").click();
        WebDriverWait wait = new WebDriverWait(driver,5);//检查发表成功的吐司是否出现
        WebElement target = wait.until(ExpectedConditions.presenceOfElementLocated(By.xpath("//*[contains(@text,'发表成功')]")));
        System.out.println(target.getText());
    }

    @AfterClass
    public void end() {
        driver.quit();
    }
}

参考资料

[01] appium测试-操作Android非原生View控件(如部分日期和地点选择控件),基于JavaCV的图像匹配方法
https://blog.csdn.net/weixin_43291944/article/details/97178106
[02] appium java 如何实现点击手机屏幕上的一个点
http://ask.testfan.cn/question/432
[03] 怎么用FastStone Capture的屏幕标尺
https://jingyan.baidu.com/article/948f5924015b72d80ff5f914.html
[04] Appium 关于 appium 的原生控件的 xpath 定位问题及常用方法
https://blog.csdn.net/onandonandon/article/details/55259273
[05] 利用图像识别技术解决非原生控件的定位问题
https://www.cnblogs.com/yinxiaoqiexuxing/p/9845362.html
[06] 原生组件和非原生组件的区别
https://cloud.tencent.com/developer/news/254236

微信扫一扫关注该公众号【测试开发者部落】

toolbar里面的控件无法定位的问题_第3张图片
image.png

点击链接加入群聊【软件测试学习交流群】
https://jq.qq.com/?_wv=1027&k=5eVEhfN
软件测试学习交流QQ群号: 511619105

你可能感兴趣的:(toolbar里面的控件无法定位的问题)