簡體   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