• 七 Appium常用方法介绍


    文本转自:http://www.cnblogs.com/sundalian/p/5629609.html

    由于appium是扩展了Webdriver协议,所以可以使用webdriver提供的方法,比如在处理webview页面,完全可以使用webdriver中的方法。当然在原生应用中,也可以使用。

    1.元素相关方法

    1.1点击操作

    WebElement button = driver.findElement(By.id(“login”));

    或者

    WebElement button = driver.findElementById(“login”)
    
    //然后执行点击操作
    
    button.click();

    由元素对象调用click()方法。

    1.2清除操作

    WebElement username = driver.findElement(By.name(“username_input”));

    或者

    WebElement username = driver.findElementName(“username_input”);
    
    username.clear();

    当执行这个方法的时候,输入框的内容会被清空。

    1.3获得元素属性的值

    getAttribute(java.lang.String name)这个方法。

    代码如下:

    WebElement username = driver.findElement(By.id(“u”));

    或者

    WebElement username = driver.findElementId(“u”);
    
    username. getAttribute(“XXXXX”);

    这样就可以获得XXXX = “abc”,abc的值了

    1.4获取元素文本

    登录按钮的源码:

    <button class="btn btn-major" id="loginBtn" type="button">登录</button>

    WebElement中提供一个getText()方法可以获取,代码如下:

    WebElement login= driver.findElement(By.id(“loginBtn”));

    或者

    WebElement login= driver.findElementId(“loginBtn”);
    
    login.getText();

    这样就能获取“登录”文字了。

    对于原生APP,使用的方法是一样的,直接用元素对象引用getText方法即可。

    1.5元素是否显示

    判断这个页面元素是不是显示出来了。

    方法有个返回值类型是boolean,也就是说如果元素显示了返回true,如果没有显示返回false。

    WebElement login= driver.findElement(By.id(“loginBtn”));

    或者

    WebElement login= driver.findElementId(“loginBtn”);
    
    //webview或者原生app都通用
    
    login.isDisplayed();

    1.6元素是否被选择

    有这样的情况,复选框或者是单选框,我们需要判断这个框是不是被勾选了,此时这个方法就派上用场了。

    WebElement checkbox= driver.findElement(By.id(“checkbox_id”));

    或者

    WebElement checkbox= driver.findElementId(“checkbox_id”);
    
    //webview和原生app通用
    
    checkbox.isSeelected();

    checkbox.isSeelected();会有返回值,如果勾选了,返回true,如果没有勾选返回false。

    1.7元素是否被启用

    有些按钮,可能在页面显示上被灰掉,就是不让点击,这个时候这个按钮是不可用的。那么我们如何判断这个按钮是否能被点击呢?请用isEnabled()方法

    WebElement login= driver.findElement(By.id(“loginBtn”));

    或者

    WebElement login= driver.findElementById(“loginBtn”);
    
    //webview和原生app通用
    
    login. isEnabled ();

    如果可用返回true,如果不可用返回false。

    1.8提交操作

    在有表单的的界面上,可以不通过点击按钮进行提交操作,这就需要用到submit()方法

    比如一个webview元素的源码:

    <button class="btn btn-major" id="loginBtn" type="submit">登录</button>

    此源码需要在一个表单(Form)中,并且type需要时submit类型,此时我们的代码可以这样写:

    WebElement login= driver.findElement(By.id(“loginBtn”));

    或者

    WebElement login= driver.findElementById(“loginBtn”);
    
    //webview和原生的app 提交按钮通用
    
    login. submit();

    2.webview中iframe的处理

    在混合应用APP中的webview页面中也会遇到frame的情况,处理情况和web页面中的frame处理一样。

    selenium webdriver中提供了进入一个iframe的方法:

    WebDriver org.openqa.selenium.WebDriver.TargetLocator.frame(String nameOrId)

    也提供了一个返回default content的方法:

    WebDriver org.openqa.selenium.WebDriver.TargetLocator.defaultContent()

    核心代码:

    driver.switchTo().frame(“XXX”); //传入的是iframe的ID

    如果要返回到以前的默认content,可以使用:

    dr.switchTo().defaultContent();

    3.下拉框选值

    webview下拉框操作:先定位出你要处理的下拉框(元素),然后将此元素传入Select对象中,接着用Select中的相关方法来选取下拉值。

    我们先要定位这个Select下拉框(元素)

    WebElement element_province = driver.findElement(By.id(“province”));

    然后把element传入Select

    Select province = new Select(element_province);

    然后由Select来操作下拉框

    province.selectByIndex(0) //province .selectByVisibleText(“XXX”)

    4.alert处理

    复制代码
    @Test
    
    public void handleAlert() throws InterruptedException {
    
    WebElement showAlert= driver.findElement(By.name("Show Alert"));
    
    //点击之后弹出alert窗口
    
    showAlert.click();
    
    WebElement yes=driver.findElement(By.name("Yes"));
    
    //点击yes按钮之后alert窗口消失
    
    yes.click();
    
    //暂停4秒观察显示
    
    Thread.sleep(4000);
    
    }
    复制代码

    Alert我们无法用selenium alert api处理 ,我们使用的是直接找到按钮的方式。这样就可以找到Yes按钮,然后点击yes按钮即可。

    5.滚动和滑动

    5.1滚动操作

    实现代码:

    复制代码
    @Test
    
    public void scroll() throws InterruptedException {
    
    //滑动直到查找到E
    
    driver.scrollToExact("E");
    
    }
    复制代码

    5.2滑动操作

    复制代码
    @Test
    
    public void swipe() throws InterruptedException {
    
    Thread.sleep(1000);
    
    TouchAction tAction=new TouchAction(driver);
    
    tAction.press(400,500).waitAction(800).moveTo(50,500).release().perform();
    
    Thread.sleep(4000);
    
    }
    复制代码

    其中的核心代码是:

    TouchAction tAction=new TouchAction(driver);  tAction.press(400,500).waitAction(800).moveTo(50,500).release().perform();

    使用的是TouchAction类,首先调用press方法,然后加上等待动作的缓冲时间800毫秒,接着移动到坐标(moveTo),当移动到指定坐标点的时候,松开手。最后调用perform方法就可执行整个操作。

    6.等待元素加载

    6.1 硬性等待

    Thread.sleep(int sleeptime);

    此方法会把当前的driver进程暂停一段时间,然后在执行接下来的操作。这方法有个缺点就是,你不能确定元素到底多久加载出来,如果你的sleepTimes是10秒,但是元素2秒就加载出来了,那么此进程还会继续等待8秒,造成时间浪费。所以非必要情况下不要使用此方法。

    6.2智能等待

    复制代码
    public void waitForElementToLoad(int timeOut, final By By) {        try {
    
    (new WebDriverWait(driver, timeOut)).until(new ExpectedCondition<Boolean>() {
    
    public Boolean apply(WebDriver driver) {
    
    WebElement element = driver.findElement(By);
    
    return element.isDisplayed();
    
    }
    
    });
    
    } catch (TimeoutException e) {
    
    Assert.fail("超时!! " + timeOut + " 秒之后还没找到元素 [" + By + "]",e);
    
    }
    
    }
    复制代码

    此方法有两个参数,timeOut是等待元素的超时时间,就是说过了这个时间如果元素还没加载出来就报错。By对象,这个是你元素的定位方式比如By.id(“login”);

    这个方法会在给定timeOut去查找元素,如果在小于timeOut的时间内找到了元素,剩下的时间不在等待,直接执行接下来的操作。

    6.3 设置等待页面加载完毕

    int pageLoadTime = 10;
    
    driver.manage().timeouts().pageLoadTimeout(pageLoadTime, TimeUnit.SECONDS);

    这段代码,加载driver.get(url)方法之前,他们等待你给定的时间,如果在给定时间内网页还是没有加载出来就会报错,如果在小于给定时间内加载完毕了,剩下的时间不再等待。

    7.Spinner下拉菜单选择

    Spinner是安卓SDK中的一个下拉菜单组件,它可以让用户从下拉框中选择不同值。

    复制代码
    @Test
    
    public void testSpinner() throws InterruptedException {
    
    WebElement spinner=driver.findElement(By.id("android:id/text1"));
    
    //点击下拉框
    
    spinner.click();
    
    //滑动查找直到摘到india
    
    driver.scrollToExact("India");
    
    WebElement optionIndia=driver.findElement(By.name("India"));
    
    //点击一下India
    
    optionIndia.click();
    
    //暂停4秒观察显示
    
    Thread.sleep(4000);
    
    }
    复制代码

    8.SeekBar拖动条操作

    实现代码:

    复制代码
    @Test
    
    public void testSeekbar() throws InterruptedException {
    
    //找到拖动条
    
    WebElement slider=driver.findElementById("com.android.androidui:id/seekBar1");
    
    //获取拖动条的开始拖动点的x坐标
    
    int xAxisStartPoint = slider.getLocation().getX();
    
    //获取拖动条的结束点的x坐标  = 开始x坐标+滑动条元素的宽度
    
    int xAxisEndPoint = xAxisStartPoint + slider.getSize().getWidth();
    
    //滚动条的y坐标
    
    int yAxis = slider.getLocation().getY();
    
    TouchAction act=new TouchAction(driver);
    
    act.press(xAxisStartPoint,yAxis).waitAction(800).moveTo(xAxisEndPoint-
    
    1,yAxis).release().perform();
    
    }
    
    @AfterClass
    
    public void afterClass() {
    
    driver.closeApp();
    
    }
    复制代码
     
  • 相关阅读:
    ABP框架系列之三十六:(MVC-Views-MVC视图)
    ABP框架系列之三十五:(MVC-Controllers-MVC控制器)
    ABP框架系列之三十四:(Multi-Tenancy-多租户)
    ABP框架系列之三十三:(Module-System-模块系统)
    2-kong的preserve_host和strip_uri解析
    2-Consul简介
    1-Consul系列文章
    1-Kong文章记录
    1-ES学些教程
    0-Jenkins系列学习文章
  • 原文地址:https://www.cnblogs.com/lincj/p/6001208.html
Copyright © 2020-2023  润新知