Git Product home page Git Product logo

access-bridge-explorer's Introduction

Access Bridge Explorer

Access Bridge Explorer is a Windows application that allows exploring, as well as interacting with, the Accessibility tree of any Java applications that uses the Java Access Bridge to expose their accessibility features, for example Android Studio and IntelliJ.

Access Bridge Explorer provides features similar to the Java Ferret and Java Monkey sample applications that were distributed as part of the Java Access Bridge SDK when it was still distributed as a stand alone download. Access Bridge Explorer integrates both set of features in a single application, is more stable and has been tested on recent versions of Windows (7, 8, 8.1 and 10) and offers a more modern and advanced user interface.

Access Bridge Explorer consumes the same API that Windows screen readers supporting the Java Access Bridge (e.g. nvda, Jaws) consume. As such, Access Bridge Explorer can be useful for validating accessibility support or identifying accessibility issues of such Java applications without having to rely on a screen reader.

Note: Access Bridge Explorer should not considered a screen reader, as it is merely a debugging tools useful for developers of Java applications who want to validated/ensure holistic support for screen readers in their application.

Screenshot

Access Bridge Explorer

Requirements

The Access Bridge Explorer application requires

  • Windows 7 or later
  • .NET 4.0 or later
  • A version of the Java JRE/JDK that contains the Java Access Bridge, e.g. Java SE Runtime Environment (JRE) Release 7 Update 6 (7u6) and later. It also works with earlier versions if the standalone Java Access Bridge SDK has been installed (see Installing Java Access Bridge).

Access Bridge Explorer is compatible with both the 32-bit and the 64-bit versions of Windows.

Installation

  • Download the latest release from https://github.com/google/access-bridge-explorer/releases/latest
  • Extract files from the .zip files
  • Execute the "AccessBridgeExplorer.exe" from the extracted folder
  • Use the "Accessbility Tree" window to explore the UI components of running Java Applications. When applications are started or stopped, use the "Refresh" menu item (or the "F5" key) to refresh the "Accessibility Tree" window.

Notes

  • If .NET 4.0 or later is not installed, either install .NET manually or follow the installation instructions.
  • If the Java Access Bridge is not installed, the "Messages" window will contain an error about failing to load the "WindowsAccessBridge-32.dll" or "WindowsAccessBridge-64.dll". Please make sure to install the Java Access Bridge, either the "x86" or "x64" version depending on the Windows version (32-bit or 64-bit).
  • If the "Accessbility Tree" window is empty even though some Java applications are running, make sure to enable the Java Access Bridge using the "jabswitch.exe" program from the JRE.

Contributing

Access Bridge Explorer is written in C#, the source code can be compiled with Visual Studio 2015, or later, including Visual Studio 2015 Community.

For more details, see CONTRIBUTING.md.

Disclaimer

This is not an official Google product.

access-bridge-explorer's People

Contributors

rpaquay avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

access-bridge-explorer's Issues

[Question] Access bridge 200ms delay after initialization

Trying to build around this code small utility to dump Java window content every 1sec - for logging frequently updated data.
However, current implementation build around 200ms delay before first refresh of JVM tree for some reason.
ExplorerFormController.cs:

private void PostRefreshTree() {
      _delayedRefreshTree.Post(TimeSpan.FromMilliseconds(200), () => {

Decreasing this limit results in empty returning list from EnumJvms() call (somewhere around 50ms delay on my machine).

Is it possible to get jvm content without this wait limit?
Thanks in advance for any info!

SetTextContents error

Hi,

I'm trying to use the function SetTextContents on a 32bits system and always return false.
On a 64bits system (i'm building this project on a x86), the function work's perfectly.

AccessBridge.Functions.SetTextContents(JvmId, _ac, "test");

System.ApplicationException when trying to call GetInfo() on AccessibleContextNode

I am trying to automate UI of "FileChooserDemo.jar" application distributed with jdk-8u121-windows-x64-demos. There is a button on the UI "Show FileChooser".
I perform the click operation on the button as follows :


//accessBridge has been initialized and hWnd is the handle of the initial window that opens 
//by launching FileChooserDemo.jar

AccessibleWindow initialWindow =  accessBridge.CreateAccessibleWindow(hWnd) ; 

//FindTargetControl() will find the control inside initialWindow  provided control lookup details
AccessibleContextNode targetControl  = FindTargetControl(some parameters); 
AccessibleActionsToDo actionsToDo = new AccessibleActionsToDo()
            {
                 actions = new AccessibleActionInfo[32],
                 actionsCount =1
            };
            actionsToDo.actions[0] = new AccessibleActionInfo() { name = "click" };
            int failure;
            targetControl.AccessBridge.Functions.DoAccessibleActions(targetControl.JvmId, targetControl.AccessibleContextHandle,ref actionsToDo, out failure);

This opens a new dialog window.

Scenario 1 :
If i now try to call GetInfo() on the initialWindow , I get a System.ApplicationException .
Also, at this point if i try to call accessBridge.EnumJvms() , the call will never return;

Scenario 2 :
If instead of using the API to perform click, i will lookup the control bounding box and perform a click on it using mouse , i can now perform both the above operations.

Since the call to DoAccessibleActions() returns after performing the click , I would like to understand if performing a operation such as click using API which opens a dialog window is a blocking operation which prevents any attempt to interact with the AccessibleWindow or trying to EnumJvms() ? Please provide any possible workaround . Also, I am not sure if this is a bug or expected behavior. Request to please tag it appropriately.

Regards,
Nish26

JAB doesnt work on new project

Hi,
I tried to replicate same scenario from here in a different project, but it never finds any JVM available. I tried using WindowsForm, giving a delay to check if loading time could be an issue, but no success.

Anyone had this in the past and could help?

problem in running application as admin.

hi everyone,
when i run access-bridge-explorer as admin,explorer in tree i am unable to see my java applications ,and when i run access-bridge-explorer in user mode, my java application in admin mode also explorer tree is not updating.

Access bridge explorer crashes when compiled with .NET 4.6.1

Hi, Thanks for the fantastic application. It helps us tremendously in resolving Java Accessibility issues. I tried compiling Access Bridge explorer with .NET 4.6.1. it compiles cleanly but it seems like it crashes as soon as first callback is raised from JAB to Access bridge explorer. The code seems ot work fine without any events attached.

Can not get AccessibleJvm List

I cloned source code from GitHub run is ok,its can view panel, viewport,property...

I create new project and add code line:

AccessBridge accessBridge = new AccessBridge();
accessBridge.Initialize();
List<AccessibleJvm> lstAccessibleJvm= accessBridge.EnumJvms();

But lstAccessibleJvm aways is count =0.

Java application crashes when opening ABC

Hey,
I have a problem with one particular java application that it crashes when I open AccessBridgeController.exe saying " is not working anymore - Close application" (Don't have the message in english but it seems like a Windows error message.
On a simple example java application everything worked fine so it seems to be a specific problem with this application.
Any hints on what I can do?

One more thing: The java application opens in its own portable JRE.

Mouse events triggered twice

When using the Access Bridge Explorer, and monitoring for mouse events, those are posted twice in the grid at the bottom of the page. Is there a way to capture mouse events only once? Please advice. Thanks.

Unable to load DLL 'WindowsAccessBridge-32.dll'

Issue

When using the Access Bridge Explorer on a 32 bit Windows 7 machine, after around 30 seconds an unhandled exception appears with the following text.

Unhandled exception has occured in your application. If you click
Continue, the application will ignore this error and attempt to continue. If
you click Quit, the application will close immediately.

Unable to load DLL 'WindowsAccessBridge-32.dll': The specified module
could not be found. (Exception from HRESULT: 0x8007007E).

Behavior

If I ignore the error by clicking Continue, The application will continue functioning as expected without any issue. However, the error will appear again after around a minute of use.

Cause

On a 32-bit Windows 7 machine running Java 7 Update 76, there is no file for WindowsAccessBridge-32.dll. From what I can tell, this file only existed in older, manual installations of the Java Access Bridge made prior to Java 7's default inclusion of the JAB.

In the absence of WindowsAccessBridge-32.dll, Access Bridge Explorer should be using C:\Windows\System32\WindowsAccessBridge.dll

Cannot get JvmList in wpf (.net framework 4.7.2)

So when I try to run the code in a WinForms-application everything works fine.
When I try to run the same code in a WPF-application, accessBridge.EnumJvms() returns 0.

This is my code:

AccessBridge Java = new AccessBridge();
Java.Initialize();
DoEvents();
var test = Java.EnumJvms();

This is my DoEvents method for wpf (should be equivalent to WinForms Application.DoEvents()):

public static void DoEvents()
{
    Application.Current.Dispatcher.Invoke(DispatcherPriority.Background, new Action(delegate {}));
}

test.Count is always 0 in wpf.
Working fine in WinForms.

Java Api Callbacks crashes on dotnet framework version 4.5 and above

trying to work with Java Access Bridge in c#, everything works fine however whenever i try to subscribe on dotnet framework version 4.5 and above e.g.

JabApi.MouseClickedDelegate mcd = new JabApi.MouseClickedDelegate(HandleMouseClickedDelegate); JabApi.setMouseClickedFP(mcd);
Application crashes, but same code works fine on dotnet framework version 4.0.
Checked Event log : Faulting module name: windowsaccessbridge-64.dll

I can't get the cell's location of screen

I want to get the element by mouse point,but when I use GetNodePathAt It return the table ,not the cell inside, I can get the table's Children ,But the cell can't show me the location of it ,?so can you tell me how to do it ?

Unable to click on a checkbox embedded inside a table cell

The below is working fine to click a stand alone checkboxes but is not working for a checkbox embedded inside a table cell.
int failure = 0; AccessibleActionInfo info = (AccessibleActionInfo)actions[action]; AccessibleActionsToDo actiontodo = new AccessibleActionsToDo(); actiontodo.actions = new AccessibleActionInfo[32]; actiontodo.actions[0] = info; actiontodo.actionsCount = 1; _accessBridge.Functions.DoAccessibleActions(JvmId, oh1, ref actiontodo, out failure)

RequestFocus implementation

Hi,
Has anyone implemented RequestFocus and could enlighten the path here?

Any other clue on how to focus in a field other than implementing RequestFocus?

WindowsAccessBridgeInterop [Java Access Bridge (JAB)] memory issues and side effects to java application monitored.

Hi,

We are using WindowsAccessBridgeInterop.Dll (in c#) to monitor a java applet (swing) application subscribing click event.

It works fine with functionality of events triggering but, java swing application is impacted with two issues(below):

  1. Heap memory becomes full and it is crashing application.
  2. Tab like controls on java application are disabled and not simulating clicking on tab controls and not changing tab pages..

Without subscribing click event or any mouse event, application runs fine without any issue.

Need urgent help in fixing these two issues with using WindowsAccessBridgeInterop.(java access bridge).

Thanks,

for one java application,the access bridge explorer

for one java application in my client's computer,the access bridge explorer is not work, the ui of access bridge explorer can't show the element tree,but the uipath can, It can inspect the controls in the java application,I don't know why ,does the dll not compatibal? but I can use JavaFerret to trace the this java application's event,however,the JavaMonkey can't show the element tree . so what's the problem,can you tell me ,It bother me for a long time

[Question] Communication with JVM

@rpaquay I try to figure out how Java Access Bridge work. I don't understand when we can start to use JAB functions(e.g. IsJavaWindow()). In AccessBridgeExplorer after AccesssBridge.Initiaze() -> _function.Windows_run() (line 90) - I thought, we can use JAB but it doesn't work, only in RefreshTree() method JAB's functions begin to work. I got stuck :(

GetNodePathAtUsingAccessBridge Sometimes not work

in the class AccessibleContextNode,there are two method to get the node ,one is "GetNodePathAtWorker" and the other is "GetNodePathAtUsingAccessBridge" ,for some applications the "GetNodePathAtWorker" can work fine,but "GetNodePathAtUsingAccessBridge" can not work ,but for some applicaitons the method "GetNodePathAtUsingAccessBridge" can work fine,but the "GetNodePathAtWorker" can't ,I want to know why?

embedded java window are not visible

Java applets are not visible to the Access Bridge Explorer, only top level windows are shown.
The embedded window handles are not checked for beeing java windows and not shown in the UI.

I have tested to access embedded java windows using the JAB and it worked.

Trying to select a value in combobox changes the selection but change is not triggered.

I am trying to automate UI of "FileChooserDemo.jar" application distributed with jdk-8u121-windows-x64-demos. There is a button on the UI "Show FileChooser". There is a drop down labelled "Look and Feel" on this application. Possible values are "Metal","Nimbus","Windows",etc. I am selecting the "Windows" options using following code :

//targetControl is AccessibleContextNode and has been looked up already
 targetControl.AccessBridge.Functions.ClearAccessibleSelectionFromContext(targetControl.JvmId, targetControl.AccessibleContextHandle);          

//index is the position of "Windows" in the dropdown
          targetControl.AccessBridge.Functions.AddAccessibleSelectionFromContext(targetControl.JvmId, targetControl.AccessibleContextHandle, index);

Expected behavior :
Theme of the application should change to selected value in drop down like it happens when manually making the selection using mouse.

Current behavior :
Theme of the application doesn't change. Also, changing the value in drop down now manually using mouse has no effect on UI.

Regards,
Nish26

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.