精华内容
下载资源
问答
  • 定位问题的几种方法

    千次阅读 2018-12-24 12:43:00
    总结记录一下定位问题的几种方法 1、回溯法 通常程序都是 1-2-3-4-5这样按顺序执行的,根据错误提示反向查找,直至找到问题的根源,是最简单的方法 2、二分法 时候遇到不知所以然的问题,可以使用二分法,例如将...

    遇到bug不要慌张,淡定!

    总结记录一下定位问题的几种方法

    1、回溯法

    通常程序都是 1-2-3-4-5这样按顺序执行的,根据错误提示反向查找,直至找到问题的根源,是最简单的方法

    2、二分法

    有时候遇到不知所以然的问题,可以使用二分法,例如将程序分为A、B两部分,只执行其中一部分,看程序是否可以 正常不正常 执行,

    然后在不正常的一部分内继续二分,不断的缩小查找范围

    3、对照法

    对照法通常用在程序可以正常运行,但是输出结果不对的情况下。这时候可以在正常的程序A、不正确的程序B内都打印日志,看看日志内的关键对象是否一致,达到快速分析出来问题的目的。

    4、执行最终SQL

    这种方法通常用在程序没有报错,正常运行情况下数据不对,或者数据库方面的错误的情况下,将最终要执行的SQL语句打印出来在数据库内执行,查看预期结果是否正确,再回溯错误原因

    通常这几种方法会结合使用,助你快速定位问题。

    展开全文
  • Appium定位元素的几种方法总结

    千次阅读 2020-12-12 12:25:42
    appium的webdriver提供了11元素定位方法,在selenium的基础上扩展了三个,本文以python语言为示例介绍appium中的元素定位方法,可以在pycharm里面输入driver.find_element_by然后会自动匹配出来。 1.通过id定位 ...

    目录

    前言

    1. 通过id定位

    2. 通过className定位

    3. 通过AccessibilityId定位

    4. 通过xpath定位

    4.1 常规定位

    4.2 contains模糊定位

    4.3 组合定位

    4.4 层级定位

    5. 通过Android UIAutomator定位

    5.1 text定位

    5.2 text模糊定位

    5.3 textStartsWith定位

    5.4 textMatches 正则匹配查找

    5.5 resourceID定位

    5.6 resourceIDMatches 定位

    5.7 className定位

    5.8 classNameMatches定位

    5.9 组合定位

    5.10 父子关系、兄弟关系定位

    5.11 滚动查找

    6. LazyUiAutomatorViewer

    7. appium与selenium元素定位之比较


    前言

    appium的webdriver提供了11种元素定位方法,在selenium的基础上扩展了三个,本文以python语言为示例介绍appium中的元素定位方法,可以在pycharm里面输入driver.find_element_by然后会自动匹配出来。

    1. 通过id定位



    resource-id也称为id,resource-id是唯一的

    # 元素定位
    agree_continue_id = "com.baidu.searchbox:id/positive_button"
    
    WebDriverWait(driver, 10, 1).until(EC.visibility_of_element_located((MobileBy.ID, agree_continue_id)))
    driver.find_element_by_id(agree_continue_id).click()

    2. 通过className定位

    这里的className对应的元素有2个,看上面的index是2,不同意是1,同意并继续是2

    # 元素定位,注意我这里的写法,用的是find_elements_by_class_name,另外还要加索引
    agree_continue_class = "android.widget.Button"
    
    WebDriverWait(driver, 10, 1).until(EC.visibility_of_all_elements_located((MobileBy.CLASS_NAME, agree_continue_class)))
    driver.find_elements_by_class_name(agree_continue_class)[1].click()

    3. 通过AccessibilityId定位

    AccessibilityId也称为content-desc

    # 元素定位
    tiku_AccessibilityId = "题库"
    WebDriverWait(driver, 10, 1).until(EC.visibility_of_all_elements_located((MobileBy.ACCESSIBILITY_ID, tiku_AccessibilityId)))
    driver.find_element_by_accessibility_id(tiku_AccessibilityId).click()

    4. 通过xpath定位

    4.1 常规定位

    比如我要用text属性的文本值定位,这时候只需要写成xpath表达式

    # 元素定位
    agree_continue_xpath = "//*[@text='同意并继续']"
    
    WebDriverWait(driver, 10, 1).until(EC.visibility_of_element_located((MobileBy.XPATH, agree_continue_xpath)))
    driver.find_element_by_xpath(agree_continue_xpath).click()

    4.2 contains模糊定位

    这种经常用于获取toast的时候,toast文本内容较长,可以采用contains包含部分文本的匹配方式。当然,可以用来模糊匹配上面的文本属性“同意并继续”

    # 元素定位
    agree_continue_xpath = "//android.widget.Button[contains(@text, '并继续')]"
    
    WebDriverWait(driver, 10, 1).until(EC.visibility_of_element_located((MobileBy.XPATH, agree_continue_xpath)))
    driver.find_element_by_xpath(agree_continue_xpath).click()

    4.3 组合定位

    比如xpath中同时包含class和text两个属性

    # 元素定位
    agree_continue_xpath = "//*[@class='android.widget.Button' and @text='同意并继续']"
    
    WebDriverWait(driver, 10, 1).until(EC.visibility_of_element_located((MobileBy.XPATH, agree_continue_xpath)))
    driver.find_element_by_xpath(agree_continue_xpath).click()

    4.4 层级定位

    使用lazy uiautomatorviewer,可以看到底下有个fullIndexXpath,这种是全路径的形式,也是层级的形式

    # 元素定位
    agree_continue_xpath = "//android.widget.FrameLayout[1]/android.widget.FrameLayout[1]/android.widget.FrameLayout[1]/android.widget.FrameLayout[1]/android.widget.RelativeLayout[1]/android.widget.FrameLayout[1]/android.widget.FrameLayout[1]/android.widget.LinearLayout[1]/android.widget.RelativeLayout[1]/android.widget.Button[2]"
    
    WebDriverWait(driver, 10, 1).until(EC.visibility_of_element_located((MobileBy.XPATH, agree_continue_xpath)))
    driver.find_element_by_xpath(agree_continue_xpath).click()

    5. 通过Android UIAutomator定位

    android uiautomator原理是通过android 自带的android uiautomator的类库去查找元素,其实和appium的定位一样,或者说他比appium的定位方式更佳多以及更佳适用,它也支持id、className、text、模糊匹配等进行定位。

    5.1 text定位

    根据text属性为“请输入手机号”查找元素。

    ele = self.driver.find_element_by_android_uiautomator('new UiSelector().text("请输入手机号")')
    ele.send_keys("123")

    5.2 text模糊定位

    模糊定位故名思义,通过text的部分信息就能够进行定位,我们直接看代码:

    ele = self.driver.find_element_by_android_uiautomator('new UiSelector().textContains("请输入手")')
    ele.send_keys("123")

    在上面的代码中我们只是将.text()的方法变成了.textContains(),在方法中传入模糊的数据就好。看到这里是否有人思考过一个问题,既然有类似的模糊寻找,那么有没有像正则表达式一样的查找呢?答案是肯定的,看我们下面的方法。

    5.3 textStartsWith定位

    # 以text什么开始
    driver.find_element_by_android_uiautomator('new UiSelector().textStartsWith("请输入")')

    5.4 textMatches 正则匹配查找

    textMatches故名思义就是通过正则的来进行查找定位,他也是通过text的属性来进行正则匹配,我们直接看代码:

    ele = self.driver.find_element_by_android_uiautomator('new UiSelector().textMatches("^请输入手.*")')
    ele.send_keys("123")

    5.5 resourceID定位

    resourceId定位和appium封装好的id定位是一样的,只是这里将写法变成了uiautomator的写法而已,看下面代码

    ele = self.driver.find_element_by_android_uiautomator('new UiSelector().resourceId("cn.com.open.mooc:id/et_phone_edit")')
    ele.send_keys('234')

    通过上面的代码和之前的代码对比大家可能发现其实他们前面都是一样的,只是在定位的时候发生了一些变化,text变换成了resourceID即可,也就是页面对象属性的信息进行变更了,其他方法都是一样。下面其他方法我就不浪费篇幅,只给大家做一个简单的案例展示。

    5.6 resourceIDMatches 定位

    通过id进行正则匹配定位

    ele = self.driver.find_element_by_android_uiautomator('new UiSelector().resourceIdMatches(".+et_phone_edit")')
    ele.send_keys('234')

    5.7 className定位

    通过调用android uiautomator使用className进行定位

    ele = self.driver.find_element_by_android_uiautomator('new UiSelector().className("android.widget.EditText")')
    ele.send_keys('234')

    5.8 classNameMatches定位

    通过className正则匹配进行定位

    ele = self.driver.find_element_by_android_uiautomator('new UiSelector().classNameMatches (".*EditText")')
    ele.send_keys('234')

    5.9 组合定位

    #组合定位
    self.driver.find_element_by_android_uiautomator('new UiSelector().resourceId("com.xueqiu.android:id/tab_name").text("我的")').click()
    

    或者

    # 组合定位,一般组合用id,class,text这三个属性会比较好一点
    # id+class 属性组合
    id_class = 'resourceId("com.xyh.commerce:id/ll_personal").className("android.widget.LinearLayout")'
    driver.find_element_by_android_uiautomator(id_class).click()

    5.10 父子关系、兄弟关系定位

    #父子关系定位
    self.driver.find_element_by_android_uiautomator('new UiSelector().resourceId("com.xueqiu.android:id/title_container").childSelector(text("股票"))')
    #兄弟关系定位
    self.driver.find_element_by_android_uiautomator('new UiSelector().resourceId("com.xueqiu.android:id/title_container").fromParent(text("股票"))')

    5.11 滚动查找

    #滚动查找
    self.driver.find_element_by_android_uiautomator('new UiScrollable(new UiSelector().scrollable(true).instance(0)).scrollIntoView(new UiSelector().text("查找的元素文本").instance(0));')

    6. LazyUiAutomatorViewer

    使用lazy uiautomatorviewer,可以看到底下有个uiaSelector,将其拷贝到代码

    # 元素定位
    agree_continue_android_uiautomator = "new UiSelector().className(\"android.widget.Button\").textContains(\"同意并继续\").resourceId(\"com.baidu.searchbox:id/positive_button\")"
    
    WebDriverWait(driver, 10, 1).until(EC.visibility_of_element_located((MobileBy.ANDROID_UIAUTOMATOR, agree_continue_android_uiautomator)))
    driver.find_element_by_android_uiautomator(agree_continue_android_uiautomator).click()

     UiAutomatorViewer是谷歌在Android4.1及之后的版本中发布的一个用来扫描和分析Android应用程序的UI组件的GUI工具。使用UiAutomatorViewer,可以检查一个App的UI来查看应用的布局、组件以及相关的属性。为了使用UiAutomatorViewer,首先需要下载并安装SDK。安装后,该工具存在于/android-sdk/tools文件夹中,可以通过uiautomatorviewer.bat进行启动。

    LazyUiAutomatorViewer是在UiAutomatorViewer源码基础上进行扩展,添加了xpath生成,页面xpath自动一键抓取导出、选择性抓取导出并自动生成java代码的安卓UI自动化测试辅助工具。该工具能大大节省安卓UI自动化实施过程中需要针对每个控件需要单独抓取xpath的时间,使QA只需要专注于测试逻辑的设计,需要使用哪个页面元素和控件,只需要直接使用LazyUiAutomatorViewer自动生成的对应变量即可,真正地使用面向对象的思想进行测试编码,极大地提高了安卓UI自动化测试的编码效率。

    使用方法:

    一、将LazyUiAutomatorViewer 源码编译生成的jar包uiautomatorviewer.jar拷贝到安卓安装目录下的 \android-sdk\tools\lib 文件夹中替换掉原来的uiautomatorviewer.jar包。

    源码及jar包的下载地址: https://github.com/lazytestteam/lazyuiautomatorviewer

    二、双击安卓安装目录下的 \android-sdk\tools\uiautomatorviewer.bat 文件,启动LazyUiAutomatorViewer 。

    三、手机连上电脑,打开手机app中需要测试的某个页面,点击如下的“截屏”按钮进行截屏。

    四、根据需要,选择导出当前截屏中所有控件或者只选择部分关心的控件进行导出,导出为java文件。

    •   一键导出当前截屏中的所有控件

    如果当前页面大部分的控件都很重要,是测试需要关注的,或者为了节省时间、不太关注代码冗余造成的运行时性能开销,就可以点击如下的按钮,一键导出当前页面截屏中的所有控件。

    导出的java文件是这样的:

    • 只选择感兴趣的部分控件进行导出

    点击如上图所示的按钮后,会弹出一个控件选择页面。选好需要的控件后,点击“导出到文件”即可。

    五、将导出的java代码直接拷贝到使用LazyAndroid框架的安卓测试工程中,即可通过使用导出的java代码中自动定义的变量完成测试逻辑的书写。当然,也可以不使用LazyAndroid测试框架,仅仅把LazyUiAutomatorViewer作为安卓自动化测试中的Xpath导出工具使用也是可以的。

     

    7. appium与selenium元素定位之比较

    框架常用的元素定位方式备注
    appiumid, className, AccessibilityId, xpath, AndroidUIAutomator对于h5页面,也支持selenium的name, link text, css等定位方式
    seleniumid, className, name, tag name, link text, paratial link text, xpath ,css 

     

     

     

     

     

     

     

    参考文章:

    1.appium中的元素定位方式

    2.自动化测试中级篇——LazyUiAutomatorViewer插件开发和使用说明

    3.Mushishi_XU 乐学,让学习更有效! Appium python自动化测试系列之Android UIAutomator终极定位(七)

    4.Appium定位方式总结

    5.appium 元素定位方法汇总

     

     

     

    展开全文
  • selenium使用Xpath定位几种方法

    万次阅读 2017-06-01 11:15:35
    第一种方法:通过绝对路径做定位(相信大家不会使用这种方式) By.xpath("html/body/div/form/input") By.xpath("//input") 第三种方法:通过元素索引定位 By.xpath("//input[4]") 第四种方法:使用xpath属性...
    第一种方法:通过绝对路径做定位(相信大家不会使用这种方式)
    

    By.xpath("html/body/div/form/input")

    By.xpath("//input")

    第三种方法:通过元素索引定位

    By.xpath("//input[4]")

    第四种方法:使用xpath属性定位(结合第2、第3中方法可以使用)

    By.xpath("//input[@id='kw1']")

    By.xpath("//input[@type='name' and @name='kw1']")

    布尔值写法 
    如果input标签中 id不是唯一的,type也不是唯一的,但在该页面中包含该id和type的只有这个元素时,那么我们可以用组合的方式定位 
    xpath=//*[@id=”kw” and @type=”text”] 
    当然还有or 或,慎用 
    xpath=//*[@id=”kw” or @type=”text”]

    第五种方法:使用部分属性值匹配(最强大的方法)

    By.xpath("//input[start-with(@id,'nice')
    By.xpath("//input[ends-with(@id,'很漂亮')
    By.xpath("//input[contains(@id,'那么美')]")


    第六种方法:跳级

    如果需要定位的元素在该页面不是唯一,但在某个容器内是唯一的,当然那个容器必须要有唯一的标志; 
    跳级的话要用两个// 
    那么可以这样表示:xpath=//div[@id=”wrapper”]//input [@id=”kw”] 
    注意:该方法要保证在某容器内该元素是唯一的。


    第七种方法: 找父级 
    如果自己没有唯一的标志,那么就找自己的上级(父级),或者上级的上级,以此类推。 
    找父级:xpath=//span[@class=’s_ipt_w’]/input 
    找父级的父级:xpath=//form[@id=”form”]/span[1]/input


    //*[contains(@onclick, 'x64_3.01.3730.spkg')and @name='delete']



    在切换ifame的时候,有时iframe是含有id的,就可以直接定位使用

    但是当iframe没有id信息的时候,如下图,


    select frame    Xpath=//*[contains(@src, 'sysmanage/systemupgrade.action')]



    转载:http://blog.csdn.net/duff2016/article/details/54572718

    展开全文
  • html中设置锚点定位几种常见方法

    千次阅读 2015-07-29 16:24:12
    在html中设置锚点定位我知道的有几种方法,使用id定位、使用name定位、使用js定位,这些方法大家可以参考下 在html中设置锚点定位我知道的有几种方法,在此和大家分享一下: 1、使用id定位: 复制代码 ...
    

    come from:http://www.jb51.net/web/170879.html

    在html中设置锚点定位我知道的有几种方法,使用id定位、使用name定位、使用js定位,这些方法大家可以参考下

    在html中设置锚点定位我知道的有几种方法,在此和大家分享一下:

    1、使用id定位:

    复制代码
    代码如下:

    <a href="#1F" name="1F">锚点1</a>
    <div name="1F">
    <p>
    11111111111
    </br>
    11111111111
    </br>11111111111
    </br>11111111111
    </br>11111111111
    </br>11111111111
    </br>11111111111
    </br>11111111111
    </br>11111111111
    </br>11111111111
    </br>11111111111
    </br>11111111111
    </br>11111111111
    </br>11111111111
    </br>11111111111
    </br>11111111111
    </br>
    </p>
    </div>

    这样的定位可以针对任何标签来定位。

    2、使用name定位:

    复制代码
    代码如下:

    <a href="#5F">锚点5</a>
    </br></br></br></br></br></br></br></br></br></br></br></br></br></br></br></br></br></br></br>
    <a name="5F">1111111</href>

    使用name属性只能针对a标签来定位,而对div等其他标签就不能起到定位作用。

    3、使用js定位

    复制代码
    代码如下:

    <li class="" οnclick="javascript:document.getElementById('here').scrollIntoView()"></li>
    展开全文
  • 定位html标签的几种方法

    千次阅读 2011-08-02 15:56:03
    1、document.getElementById("id").nodeName;   2、document.getElementsByName("a1").item(0).nodeName 3、document.getElementsByName("a1")[0].nod
  • 卫星定位授时系统的时间表示主要以下几种方法: 1、通用时间表示方法: 日历表示法:年、月、日、时、分、秒 2、儒略日(JULIAN DAY):是指从-4712年1月1日(即公元前4713年1月1日)正午开始的天数。 由J.J....
  • 机器人研究的重点转向能在未知、复杂...步型的自主移动机器人视觉系统应用包括室内机器人自主定位导航、基于视觉信息的道路右测、基于视觉信息的障碍物检测与运动估计以及移动机器人视觉伺服等。 移动机器人导航中,...
  • linux查看日志的几种方法

    万次阅读 多人点赞 2019-05-09 17:10:26
    作为开发项目出了bug想要最快速定位到问题所在,查看日志是最好不过的了~(当然,也要习惯在业务关键点设置日志)。 最常用查看日志方法: ·实时日志:tail -f XXX.log ·搜索关键字附近日志:cat -n filename | ...
  • 解决方案:推荐使用xpath的相对路径方法查找到该元素。 2>内嵌页面Iframe,导致无法定位到Iframe的页面元素。 解决方案:driver.switchTo().frame(Id/name/element)来进行进入指定id/name/element的iframe...
  • IDE Pycharm 5.0.3姊妹篇请见解决Selenium弹出新页面无法定位元素问题(Unable to locate element) 只解决一个问题--NoSuchElementException: Message: Unable to locate element 出错形式出错原因1.可能元素加载...
  • 此处整合两篇文章 第一部分是基本的定位方法;第二部详细介绍了通过XPATH定位(.find_element_by_xpath). 第一部分:  下面我将复制该文章的部分内容,若要查看完整内容,请点击原文地址查看  Python: ...
  • CSS的几种定位详解

    万次阅读 多人点赞 2018-08-10 10:50:50
    CSS中的定位使用来布局的熟练应用对页面美化很好的帮助,下面就进行详细介绍:定位分为静态定位,相对定位,绝对定位,固定定位这四定位有不同的参数,例如:left、right、top、bottom、z-index等。...
  • 高精度定位几种解决方案

    万次阅读 多人点赞 2019-01-10 19:57:41
    常见的高精度定位解决途径:RTK、SBAS、“中国精度”星基增强服务。   1. RTK 载波相位差分技术又称RTK(Real Time Kinematic)技术,是实时处理两个测站载波相位观测量的差分方法。即是将基准站采集的...
  • //先定义DOMDocument对象  $doc = new DOMDocument('... //我们定位元素是通过DOM方式去定位的?  $DOMXPath = new DOMXPath($doc);  //怎么找?其实就是定义查找规则  //1,通过元素名查找  $rule = "//pass
  • 第二是用jQuery对象的个methods(方法)。这两方式还可以联合起来混合使用。我们来试着在我们的test.html代码中选择并修改第一个ordered list.一开始,我们需要选择这个list本身,这个list一个ID叫“ordered...
  • css中的几种定位详解

    千次阅读 多人点赞 2019-06-05 20:46:05
    上课老师讲的几种关于css的定位,讲得很详细,整理了文档,老是翻文档觉得很不方便,所以想以后养成写博客的习惯,记录一些觉得总结得很好的东西。 相对定位不会脱离文档流 绝对定位/固定定位会脱离文档流 1.1 ...
  • 在使用selenium webdriver进行元素定位时,通常使用findElement或findElements方法结合By类返回的元素句柄来定位元素。其中By类的常用定位方式共八,现分别介绍如下: 1. By.name() 假设我们要测试的页面源码如下...
  • 手机的几种定位方式

    万次阅读 2018-08-07 20:11:07
    手机的位置定位 手机的定位方式 卫星定位 基站定位 WiFi定位 AGPS 卫星定位 全球卫星定位系统(Global Positioning System),简称GPS。简单地说,这个系统是由覆盖全球的24颗卫星组成,它可以保证在任意时刻...
  • 解决方案:推荐使用xpath的相对路径方法查找到该元素。2&gt;内嵌页面Iframe,导致无法定位到Iframe的页面元素。解决方案:driver.switchTo().frame(Id/name/element)来进行进入指定id/name/element的iframe内嵌...
  • 搜星速度慢,大约需要2~3分钟,不过现在这个缺陷也得到很好的解决了,许多GPS定位的设备都AGPS或EPO辅佐定位功用,协助在搜星时快速定位方位,一般只需要秒就搞定了,的乃至完成秒定定位了。 2.北斗定位: ...
  • 下面提供四解决方法。其中第一最为推荐。 在/Mingw/bin目录下,找到libstdc++-6.dll文件,将其放到C:\Windows\System32目录下。 删除掉其他含有libstdc++-6.dll 的PATH环境变量,只留下mingw的 在/Mingw/bin...
  • HTML中的几种定位方式

    万次阅读 多人点赞 2018-08-09 14:53:13
    当你没有为一个元素(例如div)指定定位方式时,默认为static,也就是按照文档的流式(flow)定位,将元素放到一个合适的地方。所以在不同的分辨率下,采用流式定位能很好的自适应,取得相对较好的布局效果。 一般来说...
  • 几种室内无线定位技术简介

    万次阅读 2014-01-11 04:27:14
    不管是GPS定位技术还是利用无线传感器网络或其他定位手段进行定位其局限性。未来室内定位技术的趋势是卫星导航技术与无线定位技术相结合,将GPS定位技术与无线定位技术有机结合,发挥各自的优长,则既可以提供较...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 439,125
精华内容 175,650
关键字:

定位有哪几种方法