跟我发布的App自动化篇章,也是一样的首先就是如何去进行我们元素定位,因为自动化就是模拟手工测试的流程去进行的,所以需要测试那个功能点,就先定位都该元素再去做对应的操作,详情如下
常用web元素定位如下:
1.使用xpth定位,class、id、name(其中id和name一般是在页面上唯一的)写法如下
//*[@id="courseInfo"]
- 使用xpth的绝对定位(这种不建议使用,路径太长,定位时间过长)
//*[@id="courseInfo"]/div[2]/div[2]/div[1]/div/div/span/div/span/input
- 使用层级定位 (原理:先定位上级然后使用绝对路径去定位)
//*[@class="site-layout-content"]//div[5]
2.使用CSS_SELECTOR 去定位,可以观察你想要定位的元素有什么唯一的值,可以直接拿过来进行定位,CSS_SELECTOR相对于xpth 定位速度更快,因为xpth是在整个dom树里面去进行查找,写法如下:
[class='desu']
3.使用LINK_TEXT 有些插入了href 链接的文本可以直接拿取文本,进行定位的,写法很简便
self.driver.find_element_by_link_text("图片")
掌握以上的定位方法基本上就可以应对工作上的绝大部份的工作了,当然定位不仅仅只有上面的这几种哈,还有很多注意:(selenium和appium在做自动化的时候,app是定位整个activity页面,而selenium是查找整个页面)
下面是我遇到的坑点和我如何去解决的方法:
坑点1
- 在做web自动化的时候,我们会遇到点击某项会弹出到一个新的页面,这个时候,你不做任何处理去定位的话,是定位不到的。需要去做一个窗口切换的 操作
windows = self.driver.window_handles
# 切换 windows 为列表里的最后一个
self.driver.switch_to.window(windows[-1])
坑点2
- 如果有frame标签的话,你也要先切换到你想要定位的frame标签里面去,才可以定位成功
self.driver.switch_to_frame("iframeResult")
坑点3
- 在定位下拉框的时候,这个时候你可以使用chrome的sources 先点击下拉框,让下拉框选项打开,然后再使用快捷键 ctrl+\ 或者 F8 对应到你的mac电脑也是一样的 command + \ 然后在点击elements 选项里面 去定位就可以了,这也是一个小技巧,本人也踩坑了好久对于这个小点
坑点4
- 断言的时候去获取属性值去断言,使用get_attribute ,先定位预期后结果展现在页面上的元素,然后再去执行测试用例,用实际结果和预期的进行对比就可以了
# 先进行定位元素
ele = self.find(By.CSS_SELECTOR,"[data-text='true']")
# 然后在去获取元素的属性值
ele_introduce = ele.get_attribute('data-text')
坑点5
- 如何去上传图片 ,现在很多网页大多数都有这个功能,遇到了这个不可能说不去进行测试的
一般带有input标签, 我们可以直接使用定位先将元素在页面上定位到,然后再去使用send_keys就可以了,send_keys里面填写图片的全路径,如下
ps(find_and_send_keys 这个是我自己封装的一个方法,大家看的时候使用正常的写法就可以了)
self.find_and_send_keys(By.XPATH,'//*[@id="courseInfo"]/div[2]/div[2]/div[1]/div/div/span/div/span/input').send_keys( r"/Users/chenhao/PycharmProjects/graduate_design_project/public_class_web/usr_resource/upload_pictures.JPG")
坑点6
- 显示等待的使用方法,写法有很多,我常用的写法如下,我们在进行自动化的时候,强制等待不建议使用,只是在进行代码调试的时候使用,一般使用显示等待和隐式等待
# 下面第一行代码
locator = (By.XPATH,"//*[@class='ant-modal-footer']//button[2]")
# 下面第二行代码
WebDriverWait(self.driver,3).until(EC.visibility_of_element_located(locator))
# 下面第三行代码
self.find_and_click(By.XPATH,"//*[@class='ant-modal-footer']//button[2]")
- 第一行代码:定义一个变量 locator = () 括号里面除了://*[@class='ant-modal-footer']//button[2] 其他的都是固定写法,你根据自己定位的元素来
- 第二行代码:visibility_of_element_located 意思是:直到某个元素出现
- 第三行代码:然后在跟你想对这个元素做的操作,就可以了