UI自动化测试--02(Xpath与CSS定位全攻略)
1.Xpath定位xpath和css定位可以利用以下元素的信息来完成定位层级结构元素自身的所有信息什么是Xpath是一种专门在xml文档中找元素的公式表达式而HTML刚好和XML结构很类似所以XPATH的表达 式也可以用于在HTML中找元素Xpath的定位方法:使用xpath的公式找指定元素driver.find_element_by_xpath(xpath的表达式)1.1路径定位绝对路径从最顶级标签到指定所要定位的元素所经过的所有层级-- /html/body/div/div/div/form/input注意:绝对路径在实际工作中用的比较少,对于页面的结构过于依赖一般不用相对路径从目标元素的任意祖辈元素开始查找缩小查找范围//form表示找到页面中所有标签名为form的元素//form/input表示找到页面中标签名为form且该form标签元素有一个input标签儿子元素案例# 1.绝对路径:用户名输入框输入admin driver.find_element_by_xpath(/html/body/div/fieldset/form/p[1]/input).send_keys(admin) time.sleep(3) # 2.相对路径:密码输入框输入123 driver.find_element_by_xpath(//form/p[2]/input).send_keys(123)1.2属性定位策略概念利用所要定位的元素自身任意的属性信息来进行定位任意元素定位都有可能定位到多个符合条件的元素对象所以在挑选属性时一般挑选特有的怎么知道是特有的id-name-class-value-其他一个个试可以支持使用id、class、name表达式a namezsid123456classt1typepasswordstyle123//*[id123456]//*匹配界面上所有元素,条件该元素必须有id属性且id的属性值必须为123456//a[classt1]//a匹配界面上所有的a标签元素条件该a标签必须有class属性且class属性值必须为t1//*[style123]案例# 1.属性定位:用户名输入框输入admin driver.find_element_by_xpath(//*[placeholder请输入用户名]).send_keys(admin)1.3属性与逻辑结合概念当元素自身的一个属性无法精准定位时可以同时使用多个属性来进行限制一般最多挑选2个超过2个想其他办法表达式//*[属性名1属性值1and属性名2属性值2]案例# 1.属性与逻辑结合定位:test1输入框输入admin driver.find_element_by_xpath(//*[classlogin and nameuser]).send_keys(admin)1.4属性与层级结合概念元素自身属性无法精准定位时可以先定位其父级元素再定位子元素案例# 1.属性与层级结合定位:test1输入框输入admin driver.find_element_by_xpath(//p[idp1]/input).send_keys(admin)1.5 XPATH延伸文本定位//*[text()元素的全部文本信息]局部属性值//*[contains(属性名,局部属性值)]局部文本//*[contains(text(),局部文本)]案例# 1.局部属性定位:用户名输入框输入admin driver.find_element_by_xpath(//*[contains(placeholder,用户)]).send_keys(admin) time.sleep(2) # 2.文本定位:定位百度超链接,并点击 driver.find_element_by_xpath(//*[text()百度]).click() time.sleep(2) # 3.局部文本定位:定位hao123,并点击 driver.find_element_by_xpath(//*[contains(text(),hao)]).click()第一阶段有id-name-class-其他属性-层级-copy第二阶段语法都清楚先copy分析是否是最优定位方式不优则优化2、CSS定位什么是CSS给HTML元素添加样式的一种语言。通过选择器的表达式可以找到对应的标签。selenium提供的具体方法driver.find_element_by_css_selector(选择器的表达式)CSS选择器:1.ID选择器: #id的属性值 2.class选择器类选择器: .class其中一个属性值 3、元素定位的另外一种写法 8种元素定位的另外一种实现方式也是selenium提供的固定方法。 注意:在最新版本selenium 4.1 只有下面的写法了 8种元素定位方式底层都是调用driver.find_element(by通过By来指定定位方式,value选中的定位所对应的 值) 3.属性选择器: [属性名属性值] 标签名[属性名属性值] 4.元素选择器: 标签名 # 1).使用CSS定位方式中id选择器定位用户名输入框并输入admin driver.find_element_by_css_selector(#userA).send_keys(admin) time.sleep(2) # 2).使用CSS定位方式中属性选择器定位密码输入框并输入123456 driver.find_element_by_css_selector(input[placeholder请输入密码]).send_keys(123456) time.sleep(2) # 3).使用CSS定位方式中class选择器定位电话号码输入框并输入18600000000 driver.find_element_by_css_selector(.telA).send_keys(18600000000) time.sleep(2) # 4).使用CSS定位方式中元素选择器定位注册按钮并点击 driver.find_element_by_css_selector(button).click() 5.层级选择器 5.1 父子关系: 定位父级元素子元素 5.2 后代关系: 定位祖辈元素 后代元素 # 1).父子关系:定位用户名输入框,输入admin driver.find_element_by_css_selector(#painput).send_keys(admin) time.sleep(2) # 1).后代关系:定位用户名输入框,输入admin driver.find_element_by_css_selector(#pa input).send_keys(admin) //*[idpa]input ---- 错误写法CSS选择器表达式 和 XPATH表达式不能混用 6.局部属性值: 标签名[属性名*局部属性值] 属性与逻辑结合:[属性名1属性值1][属性名2属性值2] # 1).局部属性定位:定位用户名输入框并输入admin driver.find_element_by_css_selector([placeholder*名]).send_keys(admin)3、元素定位的另外一种写法8种元素定位的另外一种实现方式也是selenium提供的固定方法。注意:在最新版本selenium 4.1只有下面的写法了8种元素定位方式底层都是调用driver.find_element(by通过By来指定定位方式,value选中的定位所对应的值)# ④ 执行测试步骤 # 1).id定位:定位用户名输入框并输入admin driver.find_element(By.ID, userA).send_keys(admin) time.sleep(2) # 2).XPATH属性定位:密码输入框并输入123456 driver.find_element(By.XPATH, //*[placeholder请输入密码]).send_keys(123456) time.sleep(2) # 3).使用CSS定位方式中class选择器定位电话号码输入框并输入18600000000 driver.find_element(By.CSS_SELECTOR, .telA).send_keys(18600000000) time.sleep(2) # 4).标签名定位注册按钮并点击 driver.find_element(By.TAG_NAME, button).click()By需要导包快捷导包方式,ALTENTER回车快捷导包:① 写好类名千万别写错② 光标放置到类名后按alt回车-选择import包4、元素定位方式的选择有ID优先使用ID定位,无ID-看Name属性-无Name属性-看Class属性无CLASS属性-看其他属性单个属性不行-使用多个属性属性都不能精准定位-层级看文本定位一组元素通过下标来选择copy表达式注意:分析copy出来的表达式为什么可以找到对应的原因建议:如果记忆有一些混淆的情况,降低记忆的工作量,可以直接全部都使用XPATH定位5、获取元素信息# 1).获取用户名输入框的大小 print(用户名输入框的大小, driver.find_element(By.ID, userA).size) # 2).获取页面上第一个超链接的文本内容 print(第一个超链接的文本内容, driver.find_element(By.TAG_NAME, a).text) # 3).获取页面上第一个超链接的地址 print(第一个超链接的地址, driver.find_element(By.TAG_NAME, a).get_attribute(href)) # 4).判断页面中的span标签是否可见 print(span标签可见的实际状态为, driver.find_element(By.TAG_NAME, span).is_displayed()) # 5).判断页面中取消按钮是否可用 print(取消按钮实际可用状态为, driver.find_element(By.ID, cancelA).is_enabled()) # 6).判断页面中旅游对应的复选框是否为选中的状态 print(旅游的勾选状态为, driver.find_element(By.ID, lyA).is_selected())6、常用的浏览器操作方法窗口最大化: driver.maximize_window()页面刷新: driver.refresh()当前窗口:运行代码时webdriver.Chrome(),第一次打开的窗口为当前窗口无论后续弹出多少个新的窗口 当前窗口始终为第一个所有的元素定位、关闭当前窗口都只能对于当前窗口中内容进行操作。如想对于新弹出来的窗口元素进行定 位和操作必须学习切换窗口的方法。# ④ 执行测试步骤 time.sleep(3) # 2).打印当前窗口的标题和地址 print(点击访问 百度 网站 超链接之前当前窗口的标题, driver.title) print(点击访问 百度 网站 超链接之前当前窗口的地址, driver.current_url) # 3).暂停3s,点击界面 访问 百度 网站 超链接 time.sleep(3) driver.find_element(By.ID,fw).click() # 4).暂停3s,再次打印当前窗口的标题和地址 time.sleep(3) # 点击之后当前窗口依然为注册A页面,当前窗口是指浏览器打开时的第一个窗口,除非使用窗口切换才会变更当前窗口 print(点击访问 百度 网站 超链接之后当前窗口的标题, driver.title) print(点击访问 百度 网站 超链接之后当前窗口的地址, driver.current_url) # 5).暂停3s,关闭当前窗口 time.sleep(3) driver.close()
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2462144.html
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!