selenium toast 有时候返回空字符串的问题

在自动化化测试过程中我们经常要对toast进行判断,但是在实际过程中,有时候会遇到查找toast成功,但是返回的字符串是空的情况,比如下方代码:

t=time.time()+10
while True:
 if time.time()>t:
     break
 try:
     print(222,web.driver.find_element(By.XPATH, '//*[contains(text(), "更新成功") and @class="el-message__content"]').text)
     break
 except:
     pass

我们获取更新成功的text文本,但是有时候会出现,元素查找成功,但是返回的字符串是空的情况,而且这种情况并不是每次都会出现,10次可能大概会有2~3次会出现这种情况,后续笔者一直以为是网页的问题,但是结果笔者测试发现,并不是网页问题,那么笔者这里就转换思路,有没有可能元素找到了,但是,找到元素时的文本并没有从接口获取到呢,抱着这个想法,我出现修改了代码进行测试,代码如下:

t=time.time()+10
while True:
    if time.time()>t:
        break
    try:
        toast=web.driver.find_element(By.XPATH, '//*[contains(text(), "更新成功") and @class="el-message__content"]')
        print("元素查找成功")
        break
    except:
        pass
# 元素查找成功后等待10s后再进行读取text操作
time.sleep(10)
print("toast:",toast.text)

运行后报错了,我们看看报错情况:
selenium toast 有时候返回空字符串的问题_第1张图片
selenium toast 有时候返回空字符串的问题_第2张图片
从上图我们可以看到,元素查找成功了,但是打印text的时候报错了,那么我们基本上可以断定出,toast的text属性在10s后,也就是网页toast消失后报错了,那么我们在修改一下代码,让大家更直观的了解,为什么toast返回有时为啥时空字符串,代码如下:

t=time.time()+10
while True:
    if time.time()>t:
        break
    try:
        toast=web.driver.find_element(By.XPATH, '//*[contains(text(), "更新成功") and @class="el-message__content"]')
        print("元素查找成功")
        break
    except:
        pass
# 元素查找成功后等待10s后再进行读取text操作
print("立即打印toast:","--",toast.text,"--")
time.sleep(0.5)
print("等待0.5秒后打印toast:","--",toast.text,"--")
time.sleep(0.5)
print("等待1秒后打印toast:", "--",toast.text,"--")

代码运行结果如下:
selenium toast 有时候返回空字符串的问题_第3张图片
从上图可以看到,虽然元素查找成功,但是toast却是在元素查找成功后的0.5秒才获取到toast的文本内容,所以有时找到toast元素但返回空字符串的问题,就是因为获取toast的文本内容太快了,所以这边笔者建议获取toast元素后不要立马进行获取文本内容操作,等待0.5秒获取才能然我们更稳定的获取到toast文本内容

你可能感兴趣的:(学习自动化的点点滴滴,selenium,python,测试工具)