问题1:一直NoSuchElementException: An element could not be located on the page

解决:在findelement之前加一句等待 driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);

 

问题2:中文输入是乱码

解决:加入了网上给的两句代码,并没有解决,依然是乱码。

使用CMD启动appium,运行后发现日志是中文了,但是在APP上没有填写出文字,试着点了一下文本框,输出了

中文,但是为什么需要点击一下呢?

先对element进行click操作,发现没反应。最后又试了下用tap,成功

 

问题3:使用swipe滑动操作没有反应

解决:一方面要调控好滑动两点间的坐标,以及duration这个参量,数字越大,划得越慢。可以先实际用手指体会一下滑动的速度,设置好量。

另一方面,如果一次swipe没有动静,可以再来一句试试。

 

问题4:怎么能像jmeter一样,可以写多个类,并按照一定顺序进行测试?目前只会写在一个大类里跑,有没有更好的处理办法?

 

问题5:添加球员,使用tap不管用了,发现点击的位置不是应该的位置

解决:使用xpath,成功定位(偶尔失灵)

 

问题6:怎样在这样的页面上定位到【+】这个元素?光使用automator viewer是看不到的。目前思路是取得机器屏幕尺寸,询问到【+】所占的百分比,直接点击到上面去

PS 该机型的分辨率参数是720*1280,实际测出来是720*1184,应该是去掉了虚拟按键区

解决:先获取当前机型的分辨率,再手动获取点击区域的坐标,算出所占分辨率的百分比

//获取屏幕分辨率

int width = driver.manage().window().getSize().width;

int height = driver.manage().window().getSize().height;

//点击第一行的+

driver.tap(1, width*5/6, height*100/237, 200);

啊噗嗯 demo调试记录

问题7:怎么加入判断语句,用if(driver.findElementByName("新建收货人地址").isDisplayed()),会报错称找不到这样的元素,后面的语句也不执行了

解决:修改前,默认收货地址是没有的,需要点击“新建收货人地址”,然后新增后返回,点击“确认付款”,后来发现如果选择了一次地址,那么以后下订单时会默认显示上一次的地址,也就是说找不到内容为“新建收货人地址”的元素。所以需要进行判断,当找不到这个元素的时候,直接点击“确认付款”

WebElement  address =  driver.findElementByName("新建收货人地址");

address.click();

WebElement address1 = driver.findElementByName("//android.widget.FrameLayout[1]/"

+ "android.widget.LinearLayout[1]/android.widget.FrameLayout[1]/"

+ "android.widget.LinearLayout[1]/android.widget.FrameLayout[1]/"

+ "android.widget.RelativeLayout[1]/android.view.View[1]/"

+ "android.widget.ListView[1]/android.view.View[1]");

address1.click();

driver.findElementByName("完成"); }

WebElement toPay = driver.findElementByName("确认付款");

toPay.click();

Thread.sleep(10000);

修改之后,思路是使用查找元素集合,如果没有找到,会返回[],而不是直接报错。

List <WebElement> address =  driver.findElementsByName("新建收货人地址");

if(address.size()!=0)   //如果size不为0,说明找到了该元素,点击进入选择地址

{

address.get(0).click();

WebElement address1 = driver.findElementByName("//android.widget.FrameLayout[1]/"

+ "android.widget.LinearLayout[1]/android.widget.FrameLayout[1]/"

+ "android.widget.LinearLayout[1]/android.widget.FrameLayout[1]/"

+ "android.widget.RelativeLayout[1]/android.view.View[1]/"

+ "android.widget.ListView[1]/android.view.View[1]");

address1.click();

driver.findElementByName("完成");

}

//如果size为0,说明已经有了地址,直接付款

WebElement toPay = driver.findElementByName("确认付款");

toPay.click();

Thread.sleep(10000);

 

问题8:怎样检验排名结果?

目前使用的Junit框架,用一个比较简单的断言:

assertEquals(Object expected, Object actual)

如,要检查球员2的总杆是否是61,写为

assertEquals("61", driver.findElementByXPath("//android.widget.FrameLayout[1]/"

+ "android.widget.LinearLayout[1]/android.widget.FrameLayout[1]/"

+ "android.widget.LinearLayout[1]/android.widget.FrameLayout[1]/"

+ "android.widget.RelativeLayout[1]/android.webkit.WebView[1]/"

+ "android.view.View[1]/android.widget.ListView[2]/android.view.View[4]").getAttribute("name"));

这里有个坑,一开始写的不是getAttribute("name")而是getText(),结果报错,显示返回为[]。原因是对于这个元素来说,

它的属性中“text”确实为空,只有“content-desc”包含了“61”,但是我们也不能写作getAttribute("content-desc"),毕竟在appium里面,有findElementByName(),却没有findElementByDesc()

 

啊噗嗯 demo调试记录

在检验过程中,如果有不相等的,测试会自动终止,并且在failure trace里记录。

因此在犹豫是否加入error message,毕竟已经给出来了,是否有必要再在控制台输出呢。

测试成功通过后的控制台输出:

啊噗嗯 demo调试记录

 

相关文章:

  • 2021-12-18
  • 2021-11-18
  • 2021-04-19
  • 2022-01-22
  • 2021-04-23
  • 2021-04-26
  • 2022-01-19
  • 2022-01-13
猜你喜欢
  • 2022-12-23
  • 2021-08-18
  • 2021-07-11
  • 2021-12-25
  • 2021-04-27
  • 2021-07-16
  • 2021-07-30
相关资源
相似解决方案