显示断言iOS元素时有哪些最佳实践?

时间:2019-05-06 15:44:45

标签: python appium qa appium-ios python-appium

我正在尝试使用Appium / Python为iOS应用编写我的第一个UI自动化测试。

我发现当我列出下面的10个断言时,我得到的结果非常不一致...有时它通过了,但是通常使第三个断言失败,有时使第8个断言失败。

assert driver.find_element_by_name('Settings').is_displayed()

我也尝试使用等待:

driver.wait_for_element_by_name_to_display('Settings')
assert driver.find_element_by_name('Settings').is_displayed()

有人知道这个问题上有什么好的资源吗?有任何提示或建议吗?

3 个答案:

答案 0 :(得分:1)

  

我不知道python代码,我在展示我在Java中的工作方式。希望您可以将其转换为python代码。

创建如下所示的方法:

public boolean isElementDisplayed(MobileElement el){
     try{
        return el.isDisplayed();
     }catch(Exception e){
        return false;
     }
}

然后您可以通过调用上述方法来检查元素是否显示:

MobileElement element = driver.findElementById('element id');
boolean isElementVisible = isElementDisplayed(element);
if(isElementVisible){
   //element is visible
}else{
   //element is not visible
}
  

如果不使用try catch,则在找不到元素时会引发异常。

答案 1 :(得分:1)

有一个很好的util类,可以用于此EC。这是指向git documentation

的链接
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

然后您可以通过这种方式使用它来检测是否存在元素:

from appium.webdriver.common.mobileby import MobileBy
# time in seconds
timeout = 10
wait = WebDriverWait(driver, timeout)
wait.until(EC.presence_of_element_located((MobileBy.NAME, 'Settings'))

如果您需要检测当前和可见的使用情况:

wait.until(EC.visibility_of_any_elements_located((MobileBy.NAME, 'Settings'))

答案 2 :(得分:0)

您可以等到目标元素位于以下位置。

https://github.com/appium/python-client/blob/6cc1e144289ef3ee1d3cbb96ccdc0e687d179cac/test/functional/android/helper/test_helper.py

示例:

from appium.webdriver.common.mobileby import MobileBy
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.support.ui import WebDriverWait

TIMEOUT = 3
WebDriverWait(self.driver, TIMEOUT).until(
    EC.presence_of_element_located((MobileBy.ACCESSIBILITY_ID, 'Text'))
)