博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
八 Appium常用方法介绍(转)
阅读量:5862 次
发布时间:2019-06-19

本文共 5648 字,大约阅读时间需要 18 分钟。

由于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处理

@Testpublic 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滚动操作

实现代码:

@Testpublic void scroll() throws InterruptedException {//滑动直到查找到Edriver.scrollToExact("E");}

 

5.2滑动操作

@Testpublic 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
() {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中的一个下拉菜单组件,它可以让用户从下拉框中选择不同值。

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

 

8.SeekBar拖动条操作

实现代码:

@Testpublic 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();}@AfterClasspublic void afterClass() {driver.closeApp();}

转载于:https://www.cnblogs.com/xuegonghou/p/7364083.html

你可能感兴趣的文章
遇到的那些坑
查看>>
央行下属的上海资信网络金融征信系统(NFCS)签约机构数量突破800家
查看>>
[转] Lazy evaluation
查看>>
常用查找算法总结
查看>>
grep 零宽断言
查看>>
被神话的大数据——从大数据(big data)到深度数据(deep data)思维转变
查看>>
修改校准申请遇到的问题
查看>>
【DL-CV】浅谈GoogLeNet(咕咕net)
查看>>
python大佬养成计划----win下对数据库的操作
查看>>
Mysql 中创建索引和索引的使用问题
查看>>
(cons '(〇 . 前言) 《为自己写本-Guile-书》)
查看>>
监控软件zabbix之安装
查看>>
No architectures to compile for (ONLY_ACTIVE_ARCH=YES, active arch=arm64, VALID_ARCHS=armv7 armv7s)
查看>>
Exchange Server 2016 独立部署/共存部署 (七)—— DAG功能测试
查看>>
Linq==数据访问层?
查看>>
对RTMP视频流进行BitmapData.draw()出错的解决办法
查看>>
Linux 进程中 Stop, Park, Freeze【转】
查看>>
Vertica的这些事&lt;十&gt;—— vertica中group by 和join 语句的优化
查看>>
Spark修炼之道(基础篇)——Linux大数据开发基础:第九节:Shell编程入门(一)...
查看>>
MySQL中如何启用InnoDB数据引擎
查看>>