Selenium常见报错解决

在使用selenium进行自动化测试时,运行时经常出现一些报错,以下为一些常见的报错,以及相应的解决办法。

一、元素找不到

Message: no such element: Unable to locate element: {"method":"xpath","selector":"//span[text()="删除"]"}

分析原因及解决方法:

1. 元素的xpath写错了,可以复制到浏览器F12中校验xpath是否正确

2. 页面未加载完成,运行该行代码时导致无法找到该元素,在改行代码前面加上几秒的睡眠,如time.sleep(3)

未切入到该元素的对应的iframe下,通过driver.switch_to.frame(id/name)切换到对应的iframe下。

二、元素不可交互

Message: element not interactable  (Session info: chrome=106.0.5249.103)

分析原因及解决方法:

1. 脚本执行过程中,人为干预了浏览器的操作导致页面无法交互,可以在脚本执行时不进行人为操作电脑

2. 元素被隐藏了,例如鼠标的悬停在元素上,相应的操作才出现,可以使用ActionChains(driver).move_to_element(element).perform()方法来使鼠标悬停在元素上(注意修改方法),使元素显示然后再点击相应的操作。

三、元素无法点击

ERROR - Message: element click intercepted: Element is not clickable at point (329, 156). Other element would receive the click:

...

分析原因及解决方法:

1. 元素未加载完成,运行该行代码时导致无法找到该元素,在改行代码前面加上几秒的睡眠,如time.sleep(3)。

2. 元素在iframe里,导致无法点击,可以通过切入iframe后再进行点击。

3. 通过js的方法来点击元素,示例如下

element=t.dr.find_element_by_xpath('//span[text()="提交"]/parent::button')
self.dr.execute_script("arguments[0].click();", element)

四、切换iframe时,同一级下存在多个iframe且iframe的没有name和id属性

分析原因:无法通过 正常的iframe的id和name来切换到想要的iframe,这种其实是因为开发代码不规范导致

解决方法:可以通过tag为iframe来找到所有的iframe,然后根据index切换到对应的iframe,示例如下

self.dr.switch_to.default_content()

self.dr.switch_to.frame(self.dr.find_elements_by_tag_name("iframe")[3])

self.dr.switch_to.frame(self.dr.find_elements_by_tag_name("dialog_frame")[1])

五、浏览器自带弹窗处理

分析现象及原因:浏览器自带的弹窗,无法通过正常的元素定位点击确定来关闭掉

解决方法:通过切换到alert,然后接受或者取消来关闭弹窗,示例如下

alert=self.dr.switch_to_alert()
time.sleep(1)
alert.accept() #接受弹窗
alert.dismiss() #取消弹窗

六、日期选择框无法输入

分析原因:日期选择框无法像人工一样选择选择指定的日期

解决方法:通过移除日期输入框的readonly属性,输入对应格式的日期即可,示例如下

self.dr.execute_script('arguments[0].removeAttribute(\"readonly\")',self.dr.find_element_by_xpath('//*[@id="starttime"]'))

self.dr.find_element_by_xpath('//*[@id="page-content"]/div[1]/form/input[1]').clear()

self.dr.find_element_by_xpath('//*[@id="page-content"]/div[1]/form/input[1]').send_keys('2022-05-01')

你可能感兴趣的:(selenium,自动化,python)