fhoeben/hsac-fitnesse-appium

CSS not supported anymore

roydekleijn opened this issue · 9 comments

In the test we use name=onboarding.button.continue

I get the message:

[debug] [W3C] Calling AppiumDriver.findElements() with args: ["css selector","*[name='onboarding.button.continue']","751dbf6b-fbc9-4c2c-a821-79cda18520f9"]
[debug] [XCUITest] Executing command 'findElements'
[debug] [BaseDriver] Valid locator strategies for this request: xpath, id, name, class name, -ios predicate string, -ios class chain, accessibility id
[error] [W3C] Encountered internal error running command: InvalidSelectorError: Locator Strategy 'css selector' is not supported for this session

First step is to upgrade the appium version, see pull-request

In what context did you get the error? Clicking, retrieving value, ....?

it was a click on a button

|click|name=onboarding.button.continue|

But it seems the CSS selector strategy has been removed at all from appium..

CSS selector never worked for Appium. Everywhere in 'normal' (browser) codebase where it was used and I encountered it, I disabled it for Appium.
You hit a code path I did not consider/hit before. But I have to say I'm surprised since you are selecting by technical selector name...

Do you have a stack trace to go with this message?

The strange thing is that this started to happen after we updated appium server.
So, in the test we use name and somewhere it gets converted to a CSS expression

Complete stack:


org.openqa.selenium.WebDriverException: Returned value cannot be converted to WebElement: {element-6066-11e4-a52e-4f735466cecf=D800DB38-D5E0-4D34-9DCB-AE09C0894232}
Build info: version: '3.13.0', revision: '2f0d292', time: '2018-06-25T15:24:21.231Z'
System info: host: 'MacBook-Pro-4.local', ip: 'fe80:0:0:0:ce8:b768:b405:60ff%en0', os.name: 'Mac OS X', os.arch: 'x86_64', os.version: '10.13.6', java.version: '1.8.0_102'
Driver info: driver.version: IOSDriver
	at org.openqa.selenium.remote.RemoteWebDriver.findElement(RemoteWebDriver.java:329)
	at io.appium.java_client.DefaultGenericMobileDriver.findElement(DefaultGenericMobileDriver.java:62)
	at io.appium.java_client.AppiumDriver.findElement(AppiumDriver.java:1)
	at io.appium.java_client.ios.IOSDriver.findElement(IOSDriver.java:1)
	at io.appium.java_client.FindsByAccessibilityId.findElementByAccessibilityId(FindsByAccessibilityId.java:31)
	at io.appium.java_client.MobileBy$ByAccessibilityId.findElement(MobileBy.java:288)
	at org.openqa.selenium.remote.RemoteWebDriver.findElement(RemoteWebDriver.java:314)
	at io.appium.java_client.DefaultGenericMobileDriver.findElement(DefaultGenericMobileDriver.java:58)
	at io.appium.java_client.AppiumDriver.findElement(AppiumDriver.java:1)
	at io.appium.java_client.ios.IOSDriver.findElement(IOSDriver.java:1)
	at nl.hsac.fitnesse.fixture.util.mobile.by.AppiumHeuristicBy.findFirstElementOnly(AppiumHeuristicBy.java:54)
	at nl.hsac.fitnesse.fixture.util.mobile.by.AppiumHeuristicBy.getMobileWebElement(AppiumHeuristicBy.java:35)
	at nl.hsac.fitnesse.fixture.util.mobile.by.AppiumHeuristicBy.lambda$findElement$0(AppiumHeuristicBy.java:29)
	at java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:193)
	at java.util.ArrayList$ArrayListSpliterator.tryAdvance(ArrayList.java:1351)
	at java.util.stream.ReferencePipeline.forEachWithCancel(ReferencePipeline.java:126)
	at java.util.stream.AbstractPipeline.copyIntoWithCancel(AbstractPipeline.java:498)
	at java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:485)
	at java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:471)
	at java.util.stream.FindOps$FindOp.evaluateSequential(FindOps.java:152)
	at java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234)
	at java.util.stream.ReferencePipeline.findFirst(ReferencePipeline.java:464)
	at nl.hsac.fitnesse.fixture.util.FirstNonNullHelper.firstNonNull(FirstNonNullHelper.java:98)
	at nl.hsac.fitnesse.fixture.util.FirstNonNullHelper.firstNonNull(FirstNonNullHelper.java:51)
	at nl.hsac.fitnesse.fixture.util.mobile.by.AppiumHeuristicBy.findElement(AppiumHeuristicBy.java:29)
	at nl.hsac.fitnesse.fixture.util.mobile.by.AppiumHeuristicBy.findElement(AppiumHeuristicBy.java:16)
	at nl.hsac.fitnesse.fixture.util.selenium.by.FirstElementBy.getWebElement(FirstElementBy.java:50)
	at nl.hsac.fitnesse.fixture.util.mobile.by.AppiumHeuristicBy.getMobileWebElement(AppiumHeuristicBy.java:37)
	at nl.hsac.fitnesse.fixture.util.mobile.by.AppiumHeuristicBy.lambda$findElement$0(AppiumHeuristicBy.java:29)
	at java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:193)
	at java.util.ArrayList$ArrayListSpliterator.tryAdvance(ArrayList.java:1351)
	at java.util.stream.ReferencePipeline.forEachWithCancel(ReferencePipeline.java:126)
	at java.util.stream.AbstractPipeline.copyIntoWithCancel(AbstractPipeline.java:498)
	at java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:485)
	at java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:471)
	at java.util.stream.FindOps$FindOp.evaluateSequential(FindOps.java:152)
	at java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234)
	at java.util.stream.ReferencePipeline.findFirst(ReferencePipeline.java:464)
	at nl.hsac.fitnesse.fixture.util.FirstNonNullHelper.firstNonNull(FirstNonNullHelper.java:98)
	at nl.hsac.fitnesse.fixture.util.FirstNonNullHelper.firstNonNull(FirstNonNullHelper.java:51)
	at nl.hsac.fitnesse.fixture.util.mobile.by.AppiumHeuristicBy.findElement(AppiumHeuristicBy.java:29)
	at nl.hsac.fitnesse.fixture.util.mobile.by.AppiumHeuristicBy.findElement(AppiumHeuristicBy.java:16)
	at nl.hsac.fitnesse.fixture.util.selenium.by.FirstElementBy.getWebElement(FirstElementBy.java:50)
	at nl.hsac.fitnesse.fixture.util.selenium.SeleniumHelper.findElement(SeleniumHelper.java:941)
	at nl.hsac.fitnesse.fixture.util.selenium.SeleniumHelper.lambda$findElement$2(SeleniumHelper.java:692)
	at nl.hsac.fitnesse.fixture.util.selenium.SeleniumHelper.doInCurrentContext(SeleniumHelper.java:734)
	at nl.hsac.fitnesse.fixture.util.selenium.SeleniumHelper.findElement(SeleniumHelper.java:692)
	at nl.hsac.fitnesse.fixture.util.selenium.SeleniumHelper.findByTechnicalSelectorOr(SeleniumHelper.java:187)
	at nl.hsac.fitnesse.fixture.util.mobile.AppiumHelper.getElementToClick(AppiumHelper.java:92)
	at nl.hsac.fitnesse.fixture.util.mobile.AppiumHelper.getElementToClick(AppiumHelper.java:25)
	at nl.hsac.fitnesse.fixture.slim.web.BrowserTest.getElementToClick(BrowserTest.java:833)
	at nl.hsac.fitnesse.fixture.slim.web.BrowserTest.lambda$getElementToClick$8(BrowserTest.java:837)
	at nl.hsac.fitnesse.fixture.slim.web.BrowserTest.doInContainer(BrowserTest.java:854)
	at nl.hsac.fitnesse.fixture.slim.web.BrowserTest.getElementToClick(BrowserTest.java:837)
	at nl.hsac.fitnesse.fixture.slim.web.BrowserTest.clickImp(BrowserTest.java:712)
	at nl.hsac.fitnesse.fixture.slim.web.BrowserTest.click(BrowserTest.java:690)
	at sun.reflect.GeneratedMethodAccessor1.invoke(Unknown Source)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.lang.reflect.Method.invoke(Method.java:498)
	at fitnesse.slim.fixtureInteraction.DefaultInteraction.methodInvoke(DefaultInteraction.java:221)
	at nl.hsac.fitnesse.fixture.slim.SlimFixture.invoke(SlimFixture.java:61)
	at nl.hsac.fitnesse.fixture.slim.web.BrowserTest.superInvoke(BrowserTest.java:137)
	at nl.hsac.fitnesse.fixture.slim.web.BrowserTest.lambda$invokedWrappedInWaitUntil$0(BrowserTest.java:103)
	at nl.hsac.fitnesse.fixture.util.selenium.SeleniumHelper.lambda$getConditionIgnoringStaleElement$4(SeleniumHelper.java:902)
	at org.openqa.selenium.support.ui.FluentWait.until(FluentWait.java:248)
	at nl.hsac.fitnesse.fixture.util.selenium.SeleniumHelper.waitUntil(SeleniumHelper.java:889)
	at nl.hsac.fitnesse.fixture.slim.web.BrowserTest.waitUntilImpl(BrowserTest.java:1975)
	at nl.hsac.fitnesse.fixture.slim.web.BrowserTest.waitUntil(BrowserTest.java:1905)
	at nl.hsac.fitnesse.fixture.slim.web.BrowserTest.invokedWrappedInWaitUntil(BrowserTest.java:130)
	at nl.hsac.fitnesse.fixture.slim.web.BrowserTest.invoke(BrowserTest.java:86)
	at nl.hsac.fitnesse.fixture.slim.SlimFixture.aroundSlimInvoke(SlimFixture.java:41)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.lang.reflect.Method.invoke(Method.java:498)
	at fitnesse.slim.fixtureInteraction.DefaultInteraction.methodInvoke(DefaultInteraction.java:221)
	at fitnesse.slim.fixtureInteraction.DefaultInteraction.callMethod(DefaultInteraction.java:204)
	at fitnesse.slim.fixtureInteraction.DefaultInteraction.invokeMethod(DefaultInteraction.java:188)
	at fitnesse.slim.fixtureInteraction.DefaultInteraction.findAndInvoke(DefaultInteraction.java:166)
	at fitnesse.slim.MethodExecutor.findAndInvoke(MethodExecutor.java:18)
	at fitnesse.slim.LibraryMethodExecutor.execute(LibraryMethodExecutor.java:16)
	at fitnesse.slim.StatementExecutor.getMethodExecutionResult(StatementExecutor.java:139)
	at fitnesse.slim.StatementExecutor.call(StatementExecutor.java:112)
	at fitnesse.slim.instructions.CallInstruction.executeInternal(CallInstruction.java:35)
	at fitnesse.slim.instructions.Instruction.execute(Instruction.java:29)
	at fitnesse.slim.ListExecutor$Executive.executeStatement(ListExecutor.java:49)
	at fitnesse.slim.ListExecutor$Executive.executeStatements(ListExecutor.java:43)
	at fitnesse.slim.ListExecutor.execute(ListExecutor.java:85)
	at fitnesse.slim.SlimServer.executeInstructions(SlimServer.java:82)
	at fitnesse.slim.SlimServer.processOneSetOfInstructions(SlimServer.java:75)
	at fitnesse.slim.SlimServer.tryProcessInstructions(SlimServer.java:62)
	at fitnesse.slim.SlimServer.serve(SlimServer.java:47)
	at fitnesse.slim.SlimService.handle(SlimService.java:169)
	at fitnesse.slim.SlimService.acceptOne(SlimService.java:177)
	at fitnesse.slim.SlimService.accept(SlimService.java:139)
	at fitnesse.slim.SlimService.startWithFactory(SlimService.java:92)
	at fitnesse.slim.SlimService.main(SlimService.java:57)
Caused by: java.lang.ClassCastException: java.util.LinkedHashMap cannot be cast to org.openqa.selenium.WebElement
	at org.openqa.selenium.remote.RemoteWebDriver.findElement(RemoteWebDriver.java:327)

That stack trace does not match the css selector issue you started this thread with....

This stack trace indicates that a list of elements is returned where a single web element was expected....
org.openqa.selenium.WebDriverException: Returned value cannot be converted to WebElement: {element-6066-11e4-a52e-4f735466cecf=D800DB38-D5E0-4D34-9DCB-AE09C0894232}
Caused by: java.lang.ClassCastException: java.util.LinkedHashMap cannot be cast to org.openqa.selenium.WebElement

appium server shows:


[debug] [W3C] Calling AppiumDriver.findElements() with args: ["css selector","*[name='onboarding.button.continue']","751dbf6b-fbc9-4c2c-a821-79cda18520f9"]
[debug] [XCUITest] Executing command 'findElements'
[debug] [BaseDriver] Valid locator strategies for this request: xpath, id, name, class name, -ios predicate string, -ios class chain, accessibility id
[error] [W3C] Encountered internal error running command: InvalidSelectorError: Locator Strategy 'css selector' is not supported for this session

at the same time. So I do think it's related somehow

Then it must be the server converting a 'name' to a css, and then that not working...

I suspect it's an Appium bug. Can you debug the code (put a breakpoint and see what By we are sending)?