最近在学习python,在pycharm写了一点简单的代码,在做自动化测试时发现定位元素时总是会出现各种各样的错误,故总结一下。
先贴成功例子:
`from selenium import webdriver
from time import sleep
dirver = webdriver.Chrome()
dirver.get("https://mail.163.com/")
dirver.find_element_by_id("switchAccountLogin").click()
dirver.switch_to.frame(0)
a=dirver.find_element_by_name("email")
a.clear()
a.send_keys(" ") # “ ”里面填邮箱账户
b=dirver.find_element_by_name("password")
b.clear()
b.send_keys(" ") #“ ” 里面填邮箱密码
dirver.find_element_by_id("dologin").click()
sleep(5) #需要等待网页刷新
dirver.find_element_by_xpath("//*[@id='_mail_component_19_19']/span[2]").click()
sleep(3)
er.find_element_by_class_name('nui-editableAddr-ipt').send_keys(" ")#“ ” 里面填待发送邮箱账户
sleep(3)
dirver.find_element_by_xpath("//*[@class='ua-notIE skyblue ua-chrome frame-default frame-auto']/div[2]/div/div/div/section/header/div[2]/div/div/div/input").send_keys("自动化测试发邮件") #主题
sleep(3)
dirver.switch_to_frame(dirver.find_element_by_xpath("//div[@class='APP-editor-edtr']/iframe"))
sleep(3)
c=dirver.find_element_by_xpath("//*[@class='nui-scroll']/div")
c.clear()
c.send_keys("qqqqqq") #发送内容
dirver.switch_to_default_content() # 从iframe里面切换出来
sleep(5)
######添加附件
dirver.find_element_by_xpath("//*[@class='fv0']/div[2]/input").send_keys(r" ") # “ ”里面填附件绝对地址
#####
dirver.find_element_by_xpath("//div[@class='nui-toolbar-item']/div/span[2]").click()
sleep(5)
arr_text = dirver.find_element_by_class_name("tK1").text #打印发送结果
print(arr_text)
`
这段代码实现的功能是:自动登录网易云邮箱,然后自动给某邮箱发邮件(含附件)
至于添加附件,虽然成功了,但不知道添加视频等大文件效果如何。
其中常规的错误(定位失败)更改定位方式基本上就能解决(id、name、class、xpath),我在此主要说的错误情况是:在网页上点检查元素时通过在ctrl+f显示出来的框里面定位元素时显示路径正确(例如下图),但是在pycharm里面运行结果显示Unable to locate element
此时需要去检查以下原因:
- 网页还没有加载出来。 解决办法:加sleep等待。
- 某些id、name会变。 解决办法:用xpath去定位,这样准确性相对来说比较高(id、name中带数字的尽量不要使用)。
- 网页存在嵌套,需要切换到相应的iframe。 解决办法:dirver.switch_to.frame(0)切屏,()里面的内容填id/name/index。
- 元素没有在iframe里面,之前进入iframe后没有退出。 解决办法:dirver.switch_to_default_content()。从里面切出来。
- 点击按钮之后,网页跳转,页面不一样了。
解决办法:for handle in dirver.window_handles:
dirver.switch_to_window(handle)
以上5种是我所发现定位成功但运行失败并提示找不到元素的原因及解决办法。