繁体   English   中英

在 Appium Python 中尝试 if elif

[英]Trying if ellif in Appium Python

我需要检查用户是否已经登录到应用程序。 所以我必须检查下面提到的 3 个元素中的任何一个。 如果其中有人在场,则用户已登录,我需要单击退出按钮。

元素是: 1. 退出按钮已经存在(因为用户已经登录) 2. 帐户名称

我的脚本是这样的:

 if(wd.find_element_by_name("sign out").is_displayed()):
        wd.find_element_by_name("sign out").click()      
 elif(wd.find_element_by_name("usr_name").is_displayed()):
        wd.find_element_by_name("usr_name").click()
        wd.find_element_by_name("menu_close").click()
        wait("sign out")
        wd.find_element_by_name("sign out").click()
 else:
        print"NOt Signed in"

但是发生的情况是我的 appium 正在执行第一个 IF 循环并等待元素注销并以错误消息结束。

An element could not be located on the page using the given search parameters.

我哪里做错了? 通常我如何检查元素是否存在然后单击它,就像那样。 请帮我。

elif 不应该像这样无缩进:

if(wd.find_element_by_name("sign out").is_displayed()):
        wd.find_element_by_name("sign out").click()      
elif(wd.find_element_by_name("usr_name").is_displayed()):
        wd.find_element_by_name("usr_name").click()
        wd.find_element_by_name("menu_close").click()
        wait("sign out")
        wd.find_element_by_name("sign out").click()
else:
        print"NOt Signed in"

您应该在每个命令之后使用wd.implicitly_wait(30) ,以便 appium 服务器等待下一个元素可见

如果您想在触发操作之前检查元素是否存在,只需创建一个方法,该方法根据元素的 isDisplayed 属性返回一个布尔值。

像这样的事情:

def IsElementDisplayed():
    try: 
       return wd.find_element_by_name("sign out").is_displayed()
    except:
       return false

并在测试 sript 的每个操作之前调用 IsElementDisplayed。

因为没有名为“退出”的元素,所以find_element_by_name()抛出了一个未被处理的异常。 解决这个问题的一种方法是编写一个包装器来搜索包含异常处理的元素。 如另一个答案中所述,设置隐式等待会等待元素出现并重复搜索元素直到计时器到期(以下代码中的 20 秒)

from selenium.common.exceptions import NoSuchElementException

wd.implicitly_wait(20)

sign_out = find_element("sign out")
usr_name = find_element("usr_name")

if sign_out is not None and sign_out.is_displayed():
    sign_out.click()
elif usr_name is not None and usr_name.is_displayed():
    usr_name.click()
    menu_close = find_element("menu_close")
    menu_close.click()
    sign_out = find_element("sign out")
    sign_out.click()
else:
    print("Not signed in")

def find_element(self, element_text):
    try:
        element = wd.find_element_by_name(element_text)
    except NoSuchElementException:
        return None
    return element

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM