UI自动化常见的一些问题解决方式
1、遇到元素无法定位的情况
解决方法:(1)手写css 先找到父级的唯一元素
(2)手写xpath、
(3)js在浏览器控制台去定位
控制台定位样例:(1)css方式: $(".ec-side-menu-list-root>li:nth-child(1)>a")
(2)js方式: document.querySelector("#root > div > div.ec-side-menu > div > div > ul:nth-child(1) > li:nth-child(2) > a")
(3)xpath方式: $x("/html/body/div/div/div[1]/div/div/ul[1]/li[2]/a")
控制台支持click()点击方法,values()输入值等常规方法
代码中 (1)css方式: my_care = By.CSS_SELECTOR,".ec-side-menu-list-root>li:nth-child(1)>a"
(2)xpath方式:my_care = By.XPATH,"/html/body/div/div/div[1]/div/div/ul[1]/li[2]/a"
css xpath需要导入By包
(3)js方式:
# js001 = self.driver.find_element_by_css_selector("#root > div > div.ec-side-menu > div > div > ul:nth-child(1) > li:nth-child(2) > a")
# self.driver.execute_script('arguments[0].scrollIntoView();',js001)
2、输入框无法输入的情况
解决方法:(1)js输入文本
# js001= 'document.querySelectorAll("[placeholder=请填写您的拒绝理由]").contentWindow.document.body.innerHTML="%s"' % (
# refuse_reson)
# self.driver.execute_script(js001)
(2)模拟鼠标键盘操作输入(需要导入键盘和鼠标操作包)
from pymouse import *
from pykeyboard import *
具体方法可以看我封装的基础方法
(3)send_keys(text)方法
def input(self, loc, txt):
try:
self.locator(loc).send_keys(txt)
except:
log.info("输入文本值{}失败".format(txt))
3、页面加载超时
解决方法:1、加强制等待 time.sleep(5)
2、显示等待和隐式等待结合使用
implicitly_wait():隐式等待,是设置的全局等待。设置等待时间,是对页面中的所有元素设置加载时间,
如果超出了设置时间的则抛出异常。隐式等待可以理解成在规定的时间范围内,浏览器在不停的刷新页面,
直到找到相关元素或者时间结束。
WebDriverWait():显示等待,是针对于某个特定的元素设置的等待时间,
在设置时间内,默认每隔一段时间检测一次当前页面某个元素是否存在,
如果在规定的时间内找到了元素,则直接执行,即找到元素就执行相关操作,
如果超过设置时间检测不到则抛出异常。默认检测频率为0.5s,默认抛出异常为:NoSuchElementException。 用法: webDriverWait(self,driver.timeout,poll_frequecy,ignored_exceptions=None).until_note(self,method,message= )
4、有frame框元素定位
解决方法:1、需要切换到frame框内然后继续操作,操作完frame框内的元素再操作frame框外的元素需要切换出frame框
def base_switch_to_frame(self, frame):
self.driver.switch_to.frame(frame)
# 回到默认目录
def base_get_frame(s