Appium Python中for is_displayed()中的Ifelse语句

2024-10-01 07:43:25 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试使用Appium和Python自动化移动测试。我需要检查是否显示了一个元素,如果元素没有显示,我需要执行一些操作并执行一些其他操作。我的剧本如下图所示

      wifi = self.driver.find_element_by_xpath('//*[contains(@class,"android.widget.TextView") and contains(@text, "WLAN")]')


    if wifi.is_displayed():
            print 'Wifi is switched off'
            mobiledata = self.driver.find_element_by_xpath('//android.widget.TextView[contains(@text, "Mobile data")]')
            mobiledata.click()

            print 'SUCCESS! Switch on Mobile data'

    else:
            print 'Wifi is switched on'

            wifi_off = self.driver.find_element_by_xpath('//*[contains(@class,"android.view.ImageView") and contains(@index, "0")]')
            wifi_off.click()
            print 'SUCCESS! Switch off Wifi'
            mobiledata = self.driver.find_element_by_xpath('//android.widget.TextView[contains(@text, "Mobile data")]')
            mobiledata.click()

            print 'SUCCESS! Switch on Mobile data'

现在我面临的问题是,当if条件为true时,脚本运行得很好,但是当if条件为false时,会出现找不到元素“wifi”的错误(这是真的,但这就是为什么我需要转到else部分)。在

我怎样才能解决这个问题。提前谢谢。在


Tags: self元素databydriverelementfindmobile
1条回答
网友
1楼 · 发布于 2024-10-01 07:43:25

元素是否存在与是否显示元素之间存在差异-如果找不到元素,则由driver.find_element_by_xxx引发异常

如果您想检查某个元素是否存在,那么最好执行driver.find_elements_by_xxx,因为如果没有与搜索条件匹配的元素,它将返回一个空列表,而不是抛出异常。在

因此,您可以将代码更改为类似于:

elements = self.driver.find_elements_by_xpath(blah)
wifi = None if len(elements) == 0 else elements[0]
if wifi and wifi.is_displayed():
    blah
else:
    blah

相关问题 更多 >