美文网首页
八 Appium常用方法介绍

八 Appium常用方法介绍

作者: 涛b | 来源:发表于2017-08-16 14:53 被阅读0次

    由于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获取元素文本

    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元素的源码:

    登录 //源码竟然被解析了... 

    此源码需要在一个表单(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=newTouchAction(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() {

    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 设置等待页面加载完毕

    intpageLoadTime = 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();

    }

    相关文章

      网友评论

          本文标题:八 Appium常用方法介绍

          本文链接:https://www.haomeiwen.com/subject/qouirxtx.html