当前位置: 首页 > 知识库问答 >
问题:

Appium无法在android设备上识别和滚动元素

欧阳勇
2023-03-14

我正在android的clock应用程序上尝试一段appium自动化代码,但我的代码倾向于跳过滚动逻辑。我还尝试了findelement()和gettext()来标识该元素,但仍然没有成功。代码如下:

package com.test.Clock; 
import org.testng.annotations.Test; 
import io.appium.java_client.AppiumDriver; 
import io.appium.java_client.MobileElement; 
import io.appium.java_client.PerformsTouchActions; 
import io.appium.java_client.TouchAction; 
import io.appium.java_client.android.AndroidDriver; 
import org.testng.annotations.BeforeClass; 
import java.io.BufferedReader; 
import java.io.InputStream; 
import java.io.InputStreamReader; 
import java.net.MalformedURLException; 
import java.net.URL; 
import java.util.HashMap; 
import java.util.concurrent.TimeUnit; 
import org.openqa.selenium.By; 
import org.openqa.selenium.Dimension; 
import org.openqa.selenium.JavascriptExecutor; 
import org.openqa.selenium.NoSuchFrameException; 
import org.openqa.selenium.Point; 
import org.openqa.selenium.WebDriver; 
import org.openqa.selenium.WebElement; 
import org.openqa.selenium.interactions.touch.TouchActions; 
import org.openqa.selenium.remote.DesiredCapabilities; 
import org.openqa.selenium.remote.RemoteWebDriver; 
import org.openqa.selenium.support.ui.WebDriverWait; 
import org.testng.annotations.AfterClass; 

public class Clock { 

static WebDriver driver; 
//static AndroidDriver driver; 

@BeforeClass public void setUp() throws MalformedURLException{ DesiredCapabilities capabilities = new DesiredCapabilities(); capabilities.setCapability("BROWSER_NAME", "Android"); capabilities.setCapability("VERSION", "7.0"); capabilities.setCapability("deviceName","IFZDSCVCKJUWRSOV"); capabilities.setCapability("platformName","Android"); capabilities.setCapability("--session-override",true); capabilities.setCapability("noReset",true); capabilities.setCapability("appPackage", "com.android.deskclock"); capabilities.setCapability("appActivity","com.android.deskclock.AlarmClock"); //driver = new AndroidDriver(new URL("http://127.0.0.1:4723/wd/hub"),capabilities); 
driver = new RemoteWebDriver(new URL("http://127.0.0.1:4723/wd/hub"), capabilities); 
driver.manage().timeouts().implicitlyWait(15, TimeUnit.SECONDS); 
} 

@Test public void testCal() throws InterruptedException { System.out.println("inside test"); 
WebElement createAlarm=driver.findElement(By.id("amigo:id/amigo_icon0")); //WebElement createAlarm=driver.findElement(By.xpath("//android.widget.Button[@text='Create']")); 
driver.manage().timeouts().implicitlyWait(3, TimeUnit.SECONDS); createAlarm.click(); 
// WebElement plus=driver.findElement(By.id("amigo:id/amigo_numberpicker_input")); //plus.click(); 
// driver.swipe(6, -188, 0, 0, 2); 
try { 
WebElement frame1=driver.findElement(By.id("com.android.deskclock:id/add_alarm_activity_hourNumber")); 
driver.switchTo().frame(frame1);
} 
catch (NoSuchFrameException e) { 
System.out.println(e.getMessage());
} 
Thread.sleep(2000); 
WebElement gettime=driver.findElement(By.id("com.android.deskclock:id/add_alarm_activity_hourNumber")); 
Thread.sleep(2000); 
System.out.println(gettime.getText()); 
JavascriptExecutor js = (JavascriptExecutor) driver; 
HashMap<String, Double> swipeObject = new HashMap<String, Double>(); System.out.println(swipeObject); 
swipeObject.put("startX", 3.0); 
System.out.println(swipeObject); 
swipeObject.put("startY", -183.8); 
System.out.println(swipeObject); 
swipeObject.put("endX", 0.022); 
System.out.println(swipeObject); 
swipeObject.put("endY", 0.02); 
System.out.println(swipeObject); 
swipeObject.put("duration", 2.0); 
//HashMap[] params = { swipeObject }; 
js.executeScript("mobile: scroll", swipeObject); 
System.out.println(js); 
/*JavascriptExecutor js = (JavascriptExecutor) driver; 
HashMap<String, String> scrollObject = new HashMap<String, String>(); scrollObject.put("direction", "up"); 
js.executeScript("mobile: scroll", scrollObject);*/ 
Thread.sleep(2000); 
WebElement equalTo=driver.findElement(By.id("com.android.deskclock:id/add_alarm_save")); equalTo.click(); 
} 
@AfterClass public void teardown(){ 
//close the app driver.quit();
}
}

暂时还没有答案

 类似资料:
  • 我无法在使用appium的android设备上向下滚动移动页面。我试过驾驶。滚动到(元素),它不会向下滚动到指定的元素。我尝试过使用Actions类,但我遇到了一个错误,因为“方法尚未实现”。我尝试过使用Javascript的另一种方法,但也不起作用。有人提出建议。 以下是代码:

  • 问题就在这里。我想在我的设备(三星Galaxy Ace 2)上运行我的Android Studio应用程序。但对我没什么用。告诉我我错过了什么: 2)安装了ADB驱动程序(在设备管理器中可以看到Android Composite ADB接口) 3)ADB设备列表仍然清晰,即使我重置服务器(ADB kill-server,ADB start-server,ADB devices-设备列表清晰) 4)

  • 问题内容: 我创建了一个简单的 CollapsingToolbarLayout ,它的工作原理很像。我的问题是,如果我尝试在 nestedscrollview 上使用 浮动 滚动,则在松开手指时它会停止。正常的滚动工作应该像它应该的那样。 我的活动代码未 更改= >自动生成的空活动。(我只是单击了在android studio中创建新的空活动并编辑了XML)。 我在这里读到,imageview上的

  • 无法从Mac PC上android设备的appium inspector检查元素。 Mac:10.13 Appium:1.7.2 Appium Inspector:1.5.3 Android设备模拟器:Pixel-2 Android版本:8.0 我可以为同一应用程序检查iOS(iPhone设备)的元素,但无法在android中检查元素。 当我点击appium dmg 1.5.3的inspect图标

  • 我试图使用ionic2/Angular2和typecript自动构建混合应用程序。 我使用C#编写代码。测试在BDD-specflow版本中:iOS:9.3.1 Xcode:7.3 Appium:1.4.13 将上下文切换到WEBVIEW后,我无法识别元素。 使用下面的代码调用IOSDriver 将功能设置为 我是否以正确的方式设置了功能? 尝试解决方案: 我检查使用浏览器名称能力作为空白/Saf

  • 无法使用appium在我的ios应用程序屏幕上滑动。 我正在使用appium 1.3.1和iso 8 iphone 6模拟器。 我的ios屏幕分为两个屏幕,上面有图像,下面有数据。。。 在设备上,我们可以在任何地方滑动,但不能使用appium 我试图运行Appium 1.3.1iOSSDK 8.1(Xcode 6.1)