#UI自动化# 利用xpath来定位页面上的元素

在使用katalon studio工具进行编写自动化脚本时,最常遇到的一个问题就是定位元素。通过自带的监听器来定位,效率低

下,成功率还不高。遇到复杂的页面,常常定位不准,还需要去页面复制xpath或者css。

所以贫僧一直很苦恼,一想起要写用例就头疼,首先要用web spy来获取元素,然后检查定位准不准,不准就打开浏览器

F12,复制该元素的xpath路径,然后粘贴到对象框里,再来调用,写一个用例要十分钟,遇到一点问题就得花更多的时间!

这怎么对得起公司给自己的工资呢?怎么配得上贫僧这么牛逼的名号呢?所以还是要自己来直接定位,不能光靠复制粘贴,

这样是不能前进滴!

所以下面贫僧就研究了这个xpath到底是怎么定位的,下面就是贫僧学习的记录。

  • 利用link text 或者partial link text来定位元素
    如果元素是一个文字链接,可以通过link text 或者partial link text进行元素定位。
    这个以后再补充,工作中暂时还没写到这里,至于为什么直接跳过id,name这种定位方式,emm是因为贫僧的公司的前端开发根本不写id和name啊T_T,他们是大佬(不过后面的定位里也有涉及到这两种方式)

  • 利用xpath来定位元素

xpath是一种在XML文挡住定位元素的语言。是一种比较有效的定位元素的方式,但是偶尔也会定位不准,因为xpath路径

会随着页面元素布局的改变而改变;并且不同的浏览器对xpath的实现不一样,导致利用xpath定位的脚本在兼容性不好。

不过不好归不好,方法还是要学会的!
登录页面

在以上页面里,有三个元素对象。“用户名”、“密码”、“登录”。

xpath有两种定位方式,一种是绝对路径,一种是相对路径。

1、我们尝试用绝对路径来定位用户名。

#打开浏览器
#coding =utf-8
from selenium import webdriver
browser = webdriver.chrome()
browser.get("http://192.168.1.157:8083")
#定位“用户名”输入框的位置
browser.find_element_by_xpath("在这里输入用户名的xpath路径").sendkeys("这里输入用户名")

从上面页面文档的层级关系来看,用户名在html–>body–>div–>div–>div–>div–>div[第2个]–>div[第1个]–>input下面,那

么这个xpath路径就是:html/body/div/div/div/div/div[2]/div[1]/input,将其放入脚本里

browser.find_element_by_xpath("/html/body/div/div/div/div/div[2]/div[1]/input").sendkeys("admin")

可以看到这个绝对路径在元素层级深的情况下是比较繁琐的,相对路径相对来说就简单多了,并且还扩展了id和name的定位方式。

2、用相对路径来定位密码和登录按钮

密码这个输入框所在的这一层,前面是input,里面有个type,我们可以通过input+type来定位到这唯一的一个地方。
密码

browser.find_element_by_xpath("//input[@type='password']").send_keys("123456")

同理,登录按钮也如此定位:

browser.find_element_by_xpath("//button[@class='submit']").click()
  • 不要问我为什么要在路径里加 /, //, @,我也不知道

登录页面的完整代码如下:

#打开浏览器
#coding =utf-8
from selenium import webdriver
browser = webdriver.chrome()
browser.get("http://192.168.1.157:8083")
#定位“用户名”输入框的位置,并输入用户名
browser.find_element_by_xpath("/html/body/div/div/div/div/div[2]/div[1]/input").sendkeys("admin")
#定位“密码”输入框的位置,并输入密码
browser.find_element_by_xpath("//input[@type='password']").send_keys("123456")
#定位“登录”按钮的位置,并点击
browser.find_element_by_xpath("//button[@class='submit']").click()

一个登录自动化的脚本就完成了!阿弥陀佛~~~

猜你喜欢

转载自blog.csdn.net/amrenyu/article/details/80581075