网站开发培训班 上地网站icp证明
2026/1/21 9:22:27 网站建设 项目流程
网站开发培训班 上地,网站icp证明,外贸网站模板外贸网站建设,中国东盟建设集团有限公司网站#x1f345; 点击文末小卡片#xff0c;免费获取软件测试全套资料#xff0c;资料在手#xff0c;涨薪更快先来看几个名词和解释#xff1a;dom: Document Object Model 文档对象模型dom应用: 最早应用于html和js的交互。界面的结构化描述#xff0c; 常见的格式为html、…点击文末小卡片免费获取软件测试全套资料资料在手涨薪更快先来看几个名词和解释dom: Document Object Model 文档对象模型dom应用: 最早应用于html和js的交互。界面的结构化描述 常见的格式为html、xml。核心元素为节点和属性xpath: xml路径语言用于xml 中的节点定位XPath 可在 xml 文档中对元素和属性进行遍历如下我们再来看一个App的dom:控件的基础知识和selenium一样appium为移动端抽象出了一个控件模型称为dom结构会把所有的控件都理解为xml文件在xml文件里每个控件都有自己的类型和属性既然有了类型和属性自然就可以根据这些来定位元素又因为整个模型是xml也就同样可以通过xpath的方法来定位各个控件的信息了是不是似曾相识在Web端自动化时候也介绍过相关元素定位方式具体可在文章末尾往期回顾第一条点击查看。定位交互断言通过uiautomatorviewer对雪球App首页的解析得到如下图结果通过解析结果我们可以看到元素的属性和类型有nodeattributeclickablecontent-descresource-idtextboundsIOS和Android在控件属性和上稍微有些不同(这里先说个概括后续单独出IOS的文章加以说明欢迎关注)dom属性和节点结构类似名字和属性的命名不同Appium 支持 WebDriver 定位策略的子集2.21 通过 “class” 查找 (例如 UI 组件的类型)-一般不推荐这种就是通过判断控件类型来查找例如TextView、ImageView等在实际工作中这种定位方式几乎不用因为一个页面中可能会有很多的TextView、ImageView等appiumdriver.findElementByClassName(android.widget.TextView);如上所述xpath是不仅可以在移动端进行元素定位并且是我们最常用的定位方式之一在web端自动化我们会首推CSS定位而在移动端定位我们会首推xpath定位良好的xpath定位语法会给我们定位带来准确度和便利度对速度的影响也完全会在我们的接受范围以内如下dom结构中一个界面上有多同类型控件,这些控件有相同的id或属性,不具备唯一性,所以无法直接进行指定控件的定位操作这个时候就该xpath大显身手了如我们要定位画好一个封闭的圆后面跟着的第二个RelativeLayout,具体写法如下://下面两种写法均可实现 By.xpath(((//*[text画好一个封闭的圆])[2]/following-sibling::android.widget.RelativeLayout)[2]) By.xpath(((//*[text画好一个封闭的圆])[2]/following-sibling::*[classandroid.widget.RelativeLayout])[2])很多控件都是有text属性的但是appium是不支持直接对text进行定位的而在实际工作中我们经常会拿text进行定位这就要归功于xpath了通过对xpath语法的封装我们就可以自定义一个根据text定位元素的方法来public By ByText(String text){ return By.xpath(//*[text text ]); } appiumdriver.findElement(ByText(关注));另外需要定位Toast弹框时有且仅有通过xpath的方式来实现有时候我们进行某个操作后会弹出消息提示例如点击某个按钮或下拉刷新后可能会出现类似刷新成功的提示语然后几秒后消失;弹出的消息很可能是Android系统自带的ToastToast在弹出的时候会在当前界面出现节点android.widget.Toast随着消息的消失而消失这个时候我们如果需要定位这个弹出消息对其进行测试的话就可以使用定位xpath方式了。System.out.println( appiumdriver.findElementByXPath(//*[classandroid.widget.Toast]).getText());结果学过web自动化的同学知道在HTML中元素是有自己的id的在移动端元素依然有自己的id值只不过名字叫做resource-id如下注 我们看到id的值很长其实实际使用只需要取斜杠/后面的部分就可以了如下By.id(statusTitle)在移动端自动化中有个特殊的定位方式就是根据accessibilityId定位在dom中表现就是属性content-desc的值如果Android中的content-desc中写入了值便可以通过其进行定位这里比较尴尬。。。由于研发经常偷懒不写找了半天也没能找到例子大家知道用法就好~另外要注意的是如果要写成By.xxx的形式需要使用MobileByMobileBy.AccessibilityId(AccessibilityId); appiumdriver.findElementByAccessibilityId(AccessibilityId);有时候我们需要对界面进行一定的操作方式后才能找到我们想要的元素比如滑动列表进行查找等这个时候就可以借助于android uiautomator了这里利用模拟器中的API Demo做演示进入APIDemo中Views然后滑屏寻找“Popup Menu”进行点击操作可以利用Android的UIAutomator进行滑屏操作这时候需要使用AndroidDriver另外定位元素可以使用UiScrollable在官网的uiautomator UiSelector中有用ruby写的实例不过定位方式是一致的可以直接借鉴至java代码中driver.findElementByXPath(//*[textViews]).click(); ((AndroidDriverMobileElement)driver). findElementByAndroidUIAutomator (new UiScrollable(new UiSelector().scrollable(true).instance(0)).scrollIntoView(new UiSelector().text(\Popup Menu\).instance(0))) .click();在实际运行中,AndroidUIAutomator偶尔有定位失败的情况,可能在定位元素是位置会产生一点偏差,这里稍加改造避免这种偶发性失败;By departmentName MobileBy.AndroidUIAutomator( new UiScrollable(new UiSelector().scrollable(true).instance(0)). scrollIntoView(new UiSelector().text(\ departName \).instance(0))); find(departmentName); // click(departmentName); 原来直接操作滑动查找的元素结果 click(ByText(departName));//现在利用xpath重新定位确认后再操作,成功率大大提升运行效果演示在之前的一篇文章中我们介绍过appium底层的使用了各种引擎可在文章末尾往期回顾第一条点击查看。先简单看如下图我们现在用的最新的版本优先支持的就是uiautomator2如果你使用的是相对较前的版本可能支持的是uiautomator那么这两个引擎对于以上介绍的定位有什么影响呢来看源码我们现在用的最新的版本优先支持的就是uiautomator2如果你使用的是相对较前的版本可能支持的是uiautomator那么这两个引擎对于以上介绍的定位有什么影响呢来看源码Uiautomator源码以id定位为例在Uiautomator的源码可见其对id定位要更为宽泛当我们使用By.id的时候会同时去匹配resourceId、accessibility id、idUiautomator2源码在Uiautomator2中将id的定位进行了细分对应不同的id进行判断后再操作因此在使用Uiautomator2的时候我们的写法要更为严谨最后感谢每一个认真阅读我文章的人礼尚往来总是要有的虽然不是什么很值钱的东西如果你用得到的话可以直接拿走这些资料对于做【软件测试】的朋友来说应该是最全面最完整的备战仓库这个仓库也陪伴我走过了最艰难的路程希望也能帮助到你凡事要趁早特别是技术行业一定要提升技术功底。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询