appium 3-31626 toast识别

toast识别条件

  • automationName: uiautomator2,可以识别到toast
  • getPageSource是无法找到的,uiautomatorViewer也识别不到
  • 必须使用xpath查找
  • 查找//*[@class='android.widget.Toast']
  • 验证//*[contains(@text,"xxxx")]
//Uiautomator2尝试从去找toast,如果发现toast,就将toast生成一个节点(只给了text, className="android.widget.Toast", packageName="com.android.settings"3个属性)加到appium的元素树里,
     private void addToastMsgRoot(CharSequence tokenMSG){
        AccessibilityNodeInfo node = AccessibilityNodeInfo.obtain();
        node.setText(tokenMSG);
        node.setClassName(Toast.class.getName());
        node.setPackageName("com.android.settings");
        this.children.add(new UiAutomationElement(node));
}

1.通过curl命令探测toast

for i in `seq 1 1000`;do
    date
    curl -X POST http://localhost:4723/wd/hub/session/d3608ba7-08fd-4f2c-8e24-d0e58cf8f05c/elements --data-binary '{"using":"xpath","value":"//*[@class=\"android.widget.Toast\"]"}' -H "Content-Type:application/json;charset=UTF-8"
    sleep 0.5
done

2.使用Java脚本探测

TestToast.java代码

#java
import io.appium.java_client.android.AndroidDriver;
import io.appium.java_client.android.AndroidElement;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.remote.DesiredCapabilities;

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

public class TestToast {
    private AndroidDriver driver;
    @Before
    public void setUp() throws MalformedURLException {

        DesiredCapabilities desiredCapabilities = new DesiredCapabilities();
        desiredCapabilities.setCapability("platformName","android");
        desiredCapabilities.setCapability("deviceName","demo");
        desiredCapabilities.setCapability("appPackage","io.appium.android.apis");
        desiredCapabilities.setCapability("appActivity",".ApiDemos");
        desiredCapabilities.setCapability("noReset",true);
        desiredCapabilities.setCapability("newCommandTimeout",120);
        desiredCapabilities.setCapability("automationName","UiAutomator2");
        URL RemoteURL = new URL("http://localhost:4723/wd/hub");
        driver = new AndroidDriver(RemoteURL,desiredCapabilities);
        driver.manage().timeouts().implicitlyWait(20000,TimeUnit.SECONDS);


    }
    public boolean Exist(String str) throws InterruptedException{
        try{
            driver.findElementByXPath(str);
            return true;
        }catch (Exception e){
            return false;
        }

    }
    @Test
    public void test() throws InterruptedException{
        SwipeClass swipe = new SwipeClass();
        driver.findElementByXPath("//*[@text='Views']").click();
        for(int i=0;i<5;i++){
            if (Exist("//*[@text=\"Popup Menu\"]")){
                driver.findElementByXPath("//*[@text=\"Popup Menu\"]").click();
                break;
            }else {
                swipe.swipeToUp(driver);
                Thread.sleep(1000);
            }
        }
        Thread.sleep(2000);
        driver.findElementByXPath("//*[@text=\"MAKE A POPUP!\"]").click();
        Thread.sleep(1000);
        driver.findElementByXPath("//*[@text=\"Search\"]").click();
        Thread.sleep(1000);
        System.out.println(driver.findElementByXPath("//*[@class=\"android.widget.Toast\"]").getText());
    }
    @After
    public void tearDown(){
        driver.quit();
    }
}

猜你喜欢

转载自www.cnblogs.com/csj2018/p/9748715.html
今日推荐