python+selenium 捕捉不到弹出的div类型的提示解决方法

    xiaoxiao2022-07-05  166

    我在用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  版权声明:本文为博主原创文章,转载请附上博文链接!

     

    最新回复(0)