如何在本机Android应用程序中获取元素的背景颜色



我试图使用appium自动化应用程序。如何在安卓应用中获取元素的背景色。

我试过使用

element.getCssValue("background-color")

但我面临以下异常:

java.lang.ClassCastException: com.google.common.collect.Maps$TransformedEntriesMap 不能强制转换为 java.lang.String at org.openqa.selenium.remote.RemoteWebElement.getCssValue(RemoteWebElement.java:167( 在io.appium.java_client。DefaultGenericMobileElement.getCssValue(DefaultGenericMobileElement.java:177( 在io.appium.java_client。MobileElement.getCssValue(MobileElement.java:1( at io.appium.java_client.android.AndroidElement.getCssValue(AndroidElement.java:1( at com.mahindracomviva.digibanktest.tests.corecontrollers.DynamicControlsTest.validateThemeColor(DynamicControlsTest.java:130( at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method( at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source( at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source( at java.lang.reflect.Method.invoke(未知来源( at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:50( at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12( at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:47( at org.junit.internal.runners.statement.InvokeMethod.evaluate(InvokeMethod.java:17( at org.junit.internal.runners.statement.RunBefores.evaluate(RunBefores.java:26( at org.junit.internal.runners.statement.RunAfters.evaluate(RunAfters.java:27( at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:325( at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:78( at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:57( at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290( at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71( at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288( at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58( at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268( at org.junit.internal.runners.statement.RunBefores.evaluate(RunBefores.java:26( at org.junit.runners.ParentRunner.run(ParentRunner.java:363( at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:86( at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38( at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:538( at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:760( at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:460( at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:206(

  1. 本机元素没有 css 属性。不能在本机应用程序元素上使用此方法。

  2. 仅当上下文为 Web 视图时,才能使用此方法 getCssValue((。

Appium 不直接支持获取背景颜色。

您可以尝试以下解决方法:

MobileElement elem = (MobileElement) driver.findElement(By.id("loginButton"));
org.openqa.selenium.Point point = elem.getCenter();
int centerX = point.getX();
int centerY = point.getY();
File scrFile = ((TakesScreenshot)driver).getScreenshotAs(OutputType.FILE);
BufferedImage image = ImageIO.read(scrFile);
// Getting pixel color by position x and y 
int clr = image.getRGB(centerX,centerY); 
int red   = (clr & 0x00ff0000) >> 16;
int green = (clr & 0x0000ff00) >> 8;
int blue  =  clr & 0x000000ff;
System.out.println("Red Color value = "+ red);
System.out.println("Green Color value = "+ green);
System.out.println("Blue Color value = "+ blue);

最新更新