最近在做自动化UI测试的时候,遇到的问题和解决记录
1.前端代码写了mouseover的事件,用以触发登出按钮的显示,此按钮并非button元素,为span元素。在获取该元素的xpath的时候,出现了元素xpath没有错,但是无法定位到的问题,报错信息为常见的unable to locate element,使用常见的方法无法解决。
2.调用actionchain库,使用actionchain的move_to,元素可以显示出来,但是仍然无法定位和点击。
action = action_chains.ActionChains(self.driver)
user_info =self.driver.find_element_by_xpath(LOCAL_BROWSER_ITEM_XPATH['用户信息'])
action.move_to_element(user_info).perform()
3.再次使用actionchain的move_to将鼠标移至登出元素位置,然后在进行点击操作,这时登出弹窗可以显示出来。但是无法定位到弹窗。
logout =self.driver.find_element_by_xpath('/html/body/div[2]/div/div/ul/li[2]')
action.move_to_element(logout).perform()
logout.click()
4.经查发现该弹窗不是常规的alert,所以无法使用driver.switch_to_alert来获取,尝试使用常规方法,取得登出弹窗上面的确认和取消按钮的xpath,然后再来定位按钮元素来实现确定或者取消登出,发现不能实现,报错信息为元素点击被阻断,element click intercept。
"登出确定":'/html/body/div[3]/div/div[2]/div/div[2]/div[3]/button[2]',
"登出取消":'/html/body/div[3]/div/div[2]/div/div[2]/div[3]/button[1]',
5.以上的思路是对的,但是元素的路径似乎被异常的某元素覆盖了,因此使用js来实现按钮的点击事件,最后问题解决。
logout_confirm =self.driver.find_element_by_xpath(LOCAL_BROWSER_ITEM_XPATH['登出确定'])
self.driver.execute_script("arguments[1].click();",logout_confirm)
总结:当前一些前端知识更新后,使用了大部分的框架写法,原先的传统自动化UI测试的一些思路、方法也需要跟着改进。