30秒后超时,等待位于以下位置的元素:By.id:

时间:2016-07-05 11:53:41

标签: java android selenium-webdriver appium

我尝试使用appium在Android设备上的 flipkart 应用程序中执行登录页面的测试用例。

我收到的错误如下:

  

等待位于以下位置的元素存在30秒后超时:   By.id:com.flipkart.android:id/et_password。

注意:我使用了implicit waitexplicit wait,我已经将的持续时间从30秒提高到70秒。测试偶尔会通过。 请为我提供一个解决方案

我的代码:

cab.setCapability(CapabilityType.VERSION, "5.1.1");
cab.setCapability(CapabilityType.PLATFORM, "Mac");
cab.setCapability("platformName", "android");
cab.setCapability("platformVersion", "5.1.1");
cab.setCapability("deviceName", "70af41a");
cab.setCapability("app", "/Users/xxx/Downloads/flipkart.apk");
cab.setCapability("appPackage", "com.flipkart.android"); //Replace with your app's package
cab.setCapability("appActivity", ".SplashActivity"); //Replace with app's Activity
driver = new AndroidDriver<MobileElement>(new URL("http://127.0.0.1:4723/wd/hub"), cab);

driver.manage().timeouts().implicitlyWait(50, TimeUnit.SECONDS);

element = driver.findElement(By.id("com.flipkart.android:id/mobileNo"));
element.sendKeys("1234567897");

//driver.manage().timeouts().implicitlyWait(30, TimeUnit.SECONDS);;

MobileElement signup = driver.findElement(By.id("com.flipkart.android:id/btn_msignup"));
signup.click();
WebDriverWait waitforsignup = new WebDriverWait(driver, 30);
waitforsignup.until(ExpectedConditions.presenceOfElementLocated(By.id("com.flipkart.android:id/et_password"))); 
//driver.manage().timeouts().implicitlyWait(30, TimeUnit.SECONDS);

1 个答案:

答案 0 :(得分:0)

而不是.presenceOfElementLocated()尝试.visibilityOfElementLocated()。 .presence检查元素是否在DOM中,而.visibility更进一步,确保元素可见。 Selenium不会与不可见的元素交互,因此这可能是您的问题。