Selenium: Broken ABI with appium-dotnet-driver with release 3.11.1

Created on 12 Apr 2018  ·  10Comments  ·  Source: SeleniumHQ/selenium

Context -

Selenium version: 3.11.1
Appium driver version: 3.0.0.2

The commit https://github.com/SeleniumHQ/selenium/commit/b337a82699e29776119fb89d50812cfd28d8cb8a#diff-2a14338d24c37ab68b826b6102ef12eeR26 makes ICommandExecutor inherit from IDisposable. This interface is implemented in appium dotnet driver (https://github.com/appium/appium-dotnet-driver/blob/6c14399041c5a94c537048c1d098157fa7457f7e/appium-dotnet-driver/Appium/Service/AppiumCommandExecutor.cs).

Therefore, the change in selenium breaks appium-dotnet-driver build (as Dispose is not implemented) and breaks the runtime linking.

Since this change has been released with a patch version of selenium, it seems to be an unexpected breaking change.

Related issue: appium/appium-dotnet-driver#217

Expected Behavior -

Should be able to use the appium extension with selenium 3.11.1

Actual Behavior -

Throws a runtime linking error

Method 'Dispose' in type 'OpenQA.Selenium.Appium.Service.AppiumCommandExecutor' from assembly 'appium-dotnet-driver, Version=3.0.0.2, Culture=neutral, PublicKeyToken=null' does not have an implementation.


Void .ctor(System.Uri, OpenQA.Selenium.ICapabilities, System.TimeSpan)
   at OpenQA.Selenium.Appium.AppiumDriver`1..ctor(Uri remoteAddress, ICapabilities desiredCapabilities, TimeSpan commandTimeout)
   at OpenQA.Selenium.Appium.AppiumDriver`1..ctor(Uri remoteAddress, ICapabilities desiredCapabilities)
   at OpenQA.Selenium.Appium.Android.AndroidDriver`1..ctor(Uri remoteAddress, DesiredCapabilities desiredCapabilities)
   at appiumUnitTests.testLogic.runTests(device de) in C:\Users\sjaroch\Desktop\android-test-lib\appiumAndroidUnitTests\appiumUnitTests\testLogic.cs:line 230

Steps to reproduce -

See appium/appium-dotnet-driver#217

Most helpful comment

This change has been pushed to the official drop site and to NuGet.

All 10 comments

I pushed a point-release to get a change distributed without fully analyzing all of the changes that were being released. Mea culpa. I think having ICommandExecutor implement IDisposable is the right design, so reverting is an incorrect approach. The Appium driver will need to add the Dispose method to AppiumCommandExecutor.

Breaking public API backwards compatibility does not seem to be the correct approach regardless of whether or not it improves the design. This causes a headache when trying to upgrade dependencies. It should be taken into account that users upgrading selenium may now have their tests not building or failing at runtime, with potentially no solution besides reverting.

@backmask Y’know what? I tried to apologize for the inconvenience, and I’d just as soon avoid being beaten up on anymore today. I was unclear in my previous response in that I should have said “long term, reverting is the incorrect approach.” I’m sorry I gave the impression that the issue wasn’t serious. I understand your frustration, and I apologize for being the cause of it.

Now, is there anything else I need to apologize for? Anyone else wanna pile on? As long as I’m gonna get told how horrible I make people’s lives, we might as well get it all over with in one day so that I can feel better by tomorrow.

I seem to have the same issue here. good to know it's already tracked.
Do you have an ETA for fix ?
Thanks

Well, Jim, you did ask who else wanted to pile on? :)

@MartinDelzant - this being an open source project run entirely by volunteers, the three standard responses:

  1. when it's ready
  2. before Christmas
  3. shortly after you make the PR with the fix :)

@jimevans thank you for taking care that quickly of this issue. Sorry if I did sound like I was looking to blame you, it was not my intention. I am looking forward to using your recent improvements in HttpCommandExecutor to solve long-standing ephemeral port exhaustion issues! 🍻

This change has been pushed to the official drop site and to NuGet.

I confirm 3.11.2 solves the issue, thank you! 👍

Hi , I am facing this issue on "appium-dotnet-driver" when i try to initialize the Android driver. Is this fix has not incorporated to update the "appium-dotnet-driver" ? I could not see updated Appium dotnet-driver on Nuget Packages . What would be the work around for this any suggestion will help.

The issue is fixed by after updating the appium-dotnnet-driver(v4.0.0.4 beta version) Thank you.

Was this page helpful?
0 / 5 - 0 ratings