Appium Python中for is_displayed()中的if-else语句

时间:2018-08-20 09:54:03

标签: python xpath appium

我正在尝试使用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'

现在我面临的问题是,如果条件为true,则脚本运行良好,但是,如果条件为false,则会出现以下错误:找不到“ wifi”元素(这是事实,但这就是原因我需要转到其他部分。

如何解决此问题。预先感谢。

1 个答案:

答案 0 :(得分:1)

元素是否存在与元素是否显示之间存在差异-当找不到元素时,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