我在用python+selenium,进行某一网址,登录口的测试时,对错误处理进行处理
用户名错误用户名密码正确密码格式
然后,如果是上面这种情况,系统会从右上角弹出一个类似于文本框的提示:
不存在该用户名或用户被禁用!
但是这个框,我尝试捕获<p>,<div>,它是div类型的,但是无法捕获,如下:
b.find_element_by_xpath('/html/body/div[2]/div/div[1]/p')
后来发现只有三种可能!:
1.捕获元素时语法写错了
下面的代码中,我以为是对的,后来总是报错,你能看出来是什么吗,答案我会放在最后一行:
from selenium import webdriver from selenium.webdriver.support.ui import WebDriverWait def get_ele_time(driver,time,func): WebDriverWait(driver,time).until(func) def test(): driver = webdriver.Firefox() driver.get('http://192.168.0.100') #这是我进去的网址,你们不用试了。。 try: err = get_ele_time(driver,3, lambda driver: driver.find_element_by_xpath('/html/body/div[2]/div/div[1]/p')) #上面这句话就是想要获得弹框的元素 print(err.text) #然后把弹框里的文字打印出来 except BaseException as e: print(repr(e)) #如果try里面有错误,则执行这句话,把错误信息打印出来 if __name__ == '__main__': test()
2.元素是隐藏的
display:none,这种情况,移步虫师的selenium操作隐藏的元素,https://www.cnblogs.com/fnng/p/5365900.html
3.当你捕获元素的语句在执行的时候,那个元素还没出来,或者已经消失。
可以使用time.sleep(秒数),提前引用time。 在文件开头 import time.这样的话,可以设置等待多少秒,再去找你想要的元素
答案:我犯了第一个错误!语法错误!我忘了在下面的函数里,加上return了。应该是
def get_ele_time(driver,time,func): return WebDriverWait(driver,time).until(func)
如果加上return,那么下面这句话
① err = get_ele_time(driver,3,lambda driver: driver.find_element_by_xpath('/html/body/div[2]/div/div[1]/p'))
② print(err.text)
对于①,get_ele_time()函数返回,lambda函数返回的元素。然后这个返回值,赋值给err。所以这样err就是我们要找的元素了。
然后②被执行,就可以打印出“不存在该用户名或用户名被禁用!”
刚刚,因为我忘了加上return,所以get_ele_time()没有返回值,那么err就被赋值了none。所以①还是被执行了,但是②就报错了,因为none类型没有text方法。 --------------------- 作者:Dear_Merlin 来源: 原文:https://blog.csdn.net/Dear_Merlin/article/details/82015715 版权声明:本文为博主原创文章,转载请附上博文链接!