【问题标题】:Trying if ellif in Appium Python在 Appium Python 中尝试 if elif
【发布时间】:2016-01-08 13:28:08
【问题描述】:

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

元素是: 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 循环并等待元素 sign out 并以错误消息结束。

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

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

【问题讨论】:

  • 完整的回溯是什么?

标签: python selenium appium


【解决方案1】:

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"

【讨论】:

  • 是的。它已经按照您提到的方式进行了格式化
  • 和旁注,它应该是 usr 而不是用户?只是一个问题
  • 好的,我认为我们需要更多代码才能继续,因为问题是找不到元素,它一定是格式或命名错误。
  • 我想你还没有理解我的问题。就像-检查该元素是否存在,如果存在则需要单击该按钮,否则转到下一个 else 语句并检查按钮是否存在,如果不存在,则转到最后的 else 条件并打印.但它不是介于两者之间,而是卡在第一个 IF 语句中并继续等待搜索元素并最终显示错误。
  • 没问题。请帮忙
【解决方案2】:

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

【讨论】:

    【解决方案3】:

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

    类似这样的:

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

    并在测试脚本中的每个操作之前调用 IsElementDisplayed。

    【讨论】:

      【解决方案4】:

      因为没有名称为“sign out”的元素,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
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2017-05-03
        • 1970-01-01
        • 1970-01-01
        • 2017-07-03
        • 1970-01-01
        • 2022-11-23
        • 2017-08-17
        • 1970-01-01
        相关资源
        最近更新 更多