由于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();

}

八 Appium常用方法介绍(转)的更多相关文章

  1. 八 Appium常用方法介绍

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

  2. appium===常用方法介绍,元素定位

    https://testerhome.com/topics/3711 元素定位方法: find_element_by_android_uiautomator ,使用uiautomator定位,后面参数 ...

  3. 七 Appium常用方法介绍

    文本转自:http://www.cnblogs.com/sundalian/p/5629609.html 由于appium是扩展了Webdriver协议,所以可以使用webdriver提供的方法,比如 ...

  4. java基础-BigDecimal类常用方法介绍

    java基础-BigDecimal类常用方法介绍 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.BigDecimal类概述 我们知道浮点数的计算结果是未知的.原因是计算机二进制 ...

  5. java基础-BigInteger类常用方法介绍

    java基础-BigInteger类常用方法介绍 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.BigInteger类概述 Java中long型为最大整数类型,对于超过long ...

  6. java基础-Arrays类常用方法介绍

    java基础-Arrays类常用方法介绍 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.Array类的概念 此类包含用来操作数组(比如排序和搜索)的各种方法.需要注意,如果指定 ...

  7. java基础-Math类常用方法介绍

    java基础-Math类常用方法介绍 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.Math类概念 Math 类包含用于执行基本数学运算的方法,如初等指数.对数.平方根和三角函 ...

  8. java基础-System类常用方法介绍

    java基础-System类常用方法介绍 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.System类概念 在API中system类介绍的比较简单,我们给出定义,system中 ...

  9. java基础-Integer类常用方法介绍

    java基础-Integer类常用方法介绍 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 在实际程序使用中,程序界面上用户输入的数据都是以字符串类型进行存储的.而程序开发中,我们需 ...

  10. Java基础-Calendar类常用方法介绍

    Java基础-Calendar类常用方法介绍 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.Calendar类概念 Calendar 类是一个抽象类,它为特定瞬间与一组诸如 Y ...

随机推荐

  1. 用Python语言进行时间序列ARIMA模型分析

    应用时间序列 时间序列分析是一种重要的数据分析方法,应用广泛.以下列举了几个时间序列分析的应用场景: 1.经济预测:时间序列分析可以用来分析经济数据,预测未来经济趋势和走向.例如,利用历史股市数据和经 ...

  2. flutter系列之:做一个修改组件属性的动画

    目录 简介 flutter中的动画widget AnimatedContainers使用举例 总结 简介 什么是动画呢?动画实际上就是不同的图片连续起来形成的.flutter为我们提供了一个Anima ...

  3. 【Ubuntu】3.配置下载源与更新

    在 Ubuntu 中,更改下载源可以加快下载速度.以下是更改 Ubuntu 下载源的步骤: 方法一: 备份之前的 sources.list 文件: sudo cp /etc/apt/sources.l ...

  4. 2021-07-29:最大路径和。给定一个矩阵matrix,先从左上角开始,每一步只能往右或者往下走,走到右下角。然后从右下角出发,每一步只能往上或者往左走,再回到左上角。任何一个位置的数字,只能获得

    2021-07-29:最大路径和.给定一个矩阵matrix,先从左上角开始,每一步只能往右或者往下走,走到右下角.然后从右下角出发,每一步只能往上或者往左走,再回到左上角.任何一个位置的数字,只能获得 ...

  5. 2021-10-25:计数质数。统计所有小于非负整数 n 的质数的数量。力扣204。

    2021-10-25:计数质数.统计所有小于非负整数 n 的质数的数量.力扣204. 福大大 答案2021-10-25: 自然智慧即可.从i从3开始遍历,每次加2,i*i<n. 代码用golan ...

  6. LeetCode 周赛 345(2023/05/14)体验一题多解的算法之美

    本文已收录到 AndroidFamily,技术和职场问题,请关注公众号 [彭旭锐] 提问. 往期回顾:LeetCode 双周赛第 104 场 · 流水的动态规划,铁打的结构化思考 周赛概览 T1. 找 ...

  7. 啊哈C语言案例学习笔记

    Hello World #include<stdio.h> /* 技术要点: 初学者在编写程序时,经常会忘记在语句后边添加分号, */ int main() { printf(" ...

  8. 2019年蓝桥杯C/C++大学B组省赛真题(等差数列)

    题目描述: 数学老师给小明出了一道等差数列求和的题目.但是粗心的小明忘记了一部分的数列,只记得其中N 个整数. 现在给出这N 个整数,小明想知道包含这N 个整数的最短的等差数列有几项? 输入格式 输入 ...

  9. ODOO配置属性

    2字段的属性 2.1 隐藏字段 <field name='model_name' invisible="True"/> 2.2 条件下隐藏 <field name ...

  10. C++面试八股文:C++中指针、引用、解引用和取地址有什么不同?

    某日小二参加XXX科技公司的C++工程师开发岗位2面: 面试官:指针.引用.解引用和取地址是C++中的重要概念,请问它们在语法和语义上有所不同? 小二:指针是一个变量,它存储了一个内存地址. 小二:引 ...