无法在Android appium环境中执行Isdisplayed()方法

时间:2016-02-18 06:51:51

标签: android eclipse xpath appium

我陷入了自动化的一个非常重要的部分,我无法解决。

我想执行以下代码,表明:

//if modal is displayed
if(driver.findElement(By.xpath("//android.widget.FrameLayout[1]//android.widget.FrameLayout[1]//android.widget.FrameLayout[1]//android.widget.RelativeLayout[1]/android.widget.LinearLayout[1]")).isDisplayed()) {

//click yes
driver.findElement(By.xpath("//android.widget.FrameLayout[1]//android.widget.FrameLayout[1]//android.widget.FrameLayout[1]//android.widget.RelativeLayout[1]/android.widget.LinearLayout[1]/android.widget.Button[1]")).click();
}

else {

//else click back
driver.findElement(By.xpath("//android.view.View[1]/android.widget.LinearLayout[1]/android.view.View[1]/android.widget.ImageButton[1]")).click();

}

问题在于,Appium没有识别/考虑isDisplayed()方法,卡在“if”子句上并开始搜索模态并且发生超时并且它根本不会进入下一步。

我也尝试使用下面的“size”方法而不是“isDisplayed”,但eclipse不接受“size”方法。

if(driver.findElement(By.xpath("//android.widget.FrameLayout[1]//android.widget.FrameLayout[1]//android.widget.FrameLayout[1]//android.widget.RelativeLayout[1]/android.widget.LinearLayout[1]")).size()>0)

环境:

Appium版本:1.4.16

Eclipse版本:eclipse_Kelper64

请建议。 提前致谢

2 个答案:

答案 0 :(得分:0)

  1. 除非您的xPath存在于屏幕上,否则流程应位于if-statement内,否则应处理else
  2. 如果您在Android上使用“后退”按钮,则可以使用:

    else {
         driver.navigate().back(); //else clicking back
    }
    
  3. driver.findElement(<locate element>).size() 不是一个有效的方法。你可以尝试 driver.findElements(<locate element>).size();
  4. s 与众不同,这两种方法的返回类型不同。一个返回Element,而另一个返回List <Elements>

答案 1 :(得分:0)

你也可以这样做:

public boolean isElementPresent() {
        try {
            driver.findElementByXPath("");
            return true;
        } catch (Exception e) {
            return false;
        }
    }

    //if modal is displayed
    if(isElementPresent()) {

    //click yes
    driver.findElement(By.xpath("//android.widget.FrameLayout[1]//android.widget.FrameLayout[1]//android.widget.FrameLayout[1]//android.widget.RelativeLayout[1]/android.widget.LinearLayout[1]/android.widget.Button[1]")).click();
}

     else {

    //else click back
    driver.navigate.back();

}