appium/dotnet-client

[Bug]: By.ClassName selector for IOS Driver not working as expected

tahmeednabi opened this issue · 4 comments

Description

I am trying to find an element by classname, with code as shown below:

_driver = new IOSDriver(serverUri, driverOptions);
var UserNameElement = _driver.FindElement(By.ClassName("XCUIElementTypeTextField"));

However, I get an error during test run:

Error Message:
   OpenQA.Selenium.InvalidSelectorException : Unsupported CSS selector '.XCUIElementTypeTextField'. Reason: ''[object Object].XCUIElementTypeTextField'
      is not a valid ios class. Must be a single string (e.g.: XCUIElementTypeWindow) without
      dots separating them'; For documentation on this error, please visit: https://www.selenium.dev/documentation/webdriver/troubleshooting/errors#invalid-selector-exception

For some reason, there is an [object Object] interpolated into the string selection. I think this may be a bug in the By.ClassName selector code.

Environment

  • .NET Appium Client 5.0.0
  • Appium 2.10.3
  • macOS
  • Node.js version 18
  • iOS 17
  • Simulator

Details

Please provide more details, if necessary.

Code To Reproduce Issue [ Good To Have ]

Please remember that, with sample code; it's easier to reproduce a bug and much faster to fix it.
You can git clone https://github.com/appium/sample-code or https://github.com/appium/sample-code/tree/master/sample-code/apps and reproduce an issue using C# and sample apps.
Also, you can create a gist with pasted C# code sample or put it here using markdown. About markdown please read Mastering markdown and
Writing on GitHub

Exception stack traces

Starting test execution, please wait...
A total of 1 test files matched the specified pattern.
I am in Login Test method 
test passed web element click
  Failed LoginTest [5 s]
  Error Message:
   OpenQA.Selenium.InvalidSelectorException : Unsupported CSS selector '.XCUIElementTypeTextField'. Reason: ''[object Object].XCUIElementTypeTextField'
      is not a valid ios class. Must be a single string (e.g.: XCUIElementTypeWindow) without
      dots separating them'; For documentation on this error, please visit: https://www.selenium.dev/documentation/webdriver/troubleshooting/errors#invalid-selector-exception
  Stack Trace:
     at OpenQA.Selenium.WebDriver.UnpackAndThrowOnError(Response errorResponse, String commandToExecute)
   at OpenQA.Selenium.WebDriver.Execute(String driverCommandToExecute, Dictionary`2 parameters)
   at OpenQA.Selenium.Appium.AppiumDriver.Execute(String driverCommandToExecute, Dictionary`2 parameters)
   at OpenQA.Selenium.WebDriver.FindElement(String mechanism, String value)
   at OpenQA.Selenium.By.<.ctor>b__11_0(ISearchContext context)
   at OpenQA.Selenium.By.FindElement(ISearchContext context)
   at OpenQA.Selenium.WebDriver.FindElement(By by)
   at OpenQA.Selenium.Appium.AppiumDriver.FindElement(By by)
   at fpa.BaseTests.LoginTest() in /Users/tahmeednabi/Desktop/Projects/fpa-test-automation-mobile/fpa-test-automation-mobile/src/Tests/BaseTests.cs:line 60
   at System.RuntimeMethodHandle.InvokeMethod(Object target, Void** arguments, Signature sig, Boolean isConstructor)
   at System.Reflection.MethodBaseInvoker.InvokeWithNoArgs(Object obj, BindingFlags invokeAttr)

Link to Appium logs

Please create a gist which is a paste of your full Appium logs, and link them here. Do not paste your full Appium logs here, as it will make this issue very long and hard to read!
If you are reporting a bug, always include Appium logs as linked gists! It helps to define the problem correctly and clearly.

Does other class name values work for you?

Does other class name values work for you?

No, unfortunately any string I put in the By.ClassName method gives me the same error

@tahmeednabi
By.ClassName is a Selenium Selector.
For Appium you should be using: MobileBy.ClassName

Ah, silly me! Thank you!