Giter VIP home page Giter VIP logo

Comments (5)

github-actions avatar github-actions commented on September 9, 2024

@arnonax-tr, thank you for creating this issue. We will troubleshoot it as soon as we can.


Info for maintainers

Triage this issue by using labels.

If information is missing, add a helpful comment and then I-issue-template label.

If the issue is a question, add the I-question label.

If the issue is valid but there is no time to troubleshoot it, consider adding the help wanted label.

If the issue requires changes or fixes from an external project (e.g., ChromeDriver, GeckoDriver, MSEdgeDriver, W3C), add the applicable G-* label, and it will provide the correct link and auto-close the issue.

After troubleshooting the issue, please add the R-awaiting answer label.

Thank you!

from selenium.

nvborisenko avatar nvborisenko commented on September 9, 2024

This issue is obvious.

network.RequestPaused += async (_, args) =>
{
  await network.ContinueRequestWithoutModification(args.RequestData);
}

which may lead to System.IO.IOException : Cannot access a closed stream.

It happens because your async event handler is invoked in background, while main execution program is continuing. And there is a chance that main execution flow disposes driver earlier than your network.ContinueRequestWithoutModification(args.RequestData).

This situation is fixed in new BiDi approach (#14318). I have no ideas how to fix it.

Probably making your event handler sync can help (at least please try):

network.RequestPaused += (_, args) =>
{
  Task.Run(async () => await network.ContinueRequestWithoutModification(args.RequestData));
}

EDITED:
You may prove my theory via adding a delay in your async handler like await Task.Delay(5_000) before invocation of network.Continue....

from selenium.

arnonax-tr avatar arnonax-tr commented on September 9, 2024

And there is a chance that main execution flow disposes driver earlier than your network.ContinueRequestWithoutModification(args.RequestData).

I don't think so. That's exactly the reason I added the CountdownEvent object (executingHandlers). This should ensure that I'm not disposing the driver (or even the DevToolsSession) before all event handlers are done. (Or if they just start after dispose has already started, they immediately exit due to the if (!executingHandlers.TryAddCount()) statement)

from selenium.

arnonax-tr avatar arnonax-tr commented on September 9, 2024

Regarding the BiDi approach: do you have an ETA for when it will be available? Also I'll be grateful if you can provide an example of how my code should look like with that approach.

from selenium.

nvborisenko avatar nvborisenko commented on September 9, 2024

That's exactly the reason I added the CountdownEvent object (executingHandlers)

Your event handler is async void, selenium invokes (actually schedules your delegate in TaskScheduler to be invoked), and we don't know when exactly your handler is actually invoked. Moreover, in selenium we really fire and forget event handlers. This is design issue, which may lead to unexpected behavior in race conditions. This design issue is addressed in BiDi implementation (or at least should be addressed).

No ETA, PR is under review.

from selenium.

Related Issues (20)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.