start here

Introduction

Testing Performed August 2015. Previous results can be found here.

We are currently updating this information. Our hopes are to have this document completed and updated before March 2016.

Purpose

The purpose of this test page is to test 1) how screen readers read tables with a blank first cell and 2) how screen readers support table heading markup for complex tables.

Conclusions

Testing basic data tables

The following tables test how basic data tables read.

Table 1a: A simple table with one header row only. Uses th but does not use scope.

Table 1a
First Name Last Name Birth Date
John Davis May 5
Greg Metz January 9
Bonnie Waters October 8

Results:

NVDA 2015.2 / Firefox 40: good

JAWS 15 / IE 11: good

VoiceOver / Mac OSx 10.9.5: good

VoiceOver / iPad iOS 8.3: good

Table 1b: A simple table with one header column only. Uses th but does not use scope.

Table 1b
First Name John Greg Bonnie
Last Name Davis Metz Waters
Age 54 37 42
Birth Month May January October
Birth Date 5 9 8
Location Chicago Toronto San Diego

Results:

NVDA 2015.2 / Firefox 40: good

JAWS 15 / IE 11: good

VoiceOver / Mac OSx 10.9.5: good

VoiceOver / iPad iOS 8.3: good

Table 1c: A two-dimensional table with no blank header cells. Uses th but does not use scope.

Table 1c: Greensprings Running Club Personal Bests
Name 1 mile 5 km 10 km
Mary 8:32 28:04 1:01:16
Betsy 7:43 26:47 55:38
Matt 7:55 27:29 57:04
Todd 7:01 24:21 50:35

Results:

NVDA 2015.2 / Firefox 40: good

JAWS 15 / IE 11: good

VoiceOver / Mac OSx 10.9.5: good

VoiceOver / iPad iOS 8.3: good

Table 1d: A two-dimensional table with no blank header cells. Uses th and scope with col and row.

Table 1d: Greensprings Running Club Personal Bests
Name 1 mile 5 km 10 km
Mary 8:32 28:04 1:01:16
Betsy 7:43 26:47 55:38
Matt 7:55 27:29 57:04
Todd 7:01 24:21 50:35

Results:

NVDA 2015.2 / Firefox 40: good

JAWS 15 / IE 11: good

VoiceOver / Mac OSx 10.9.5: good

VoiceOver / iPad iOS 8.3: good

Testing tables with a blank first cell

The following tables test how using TD vs TH on the blank cell affects screen readers.

Table 2a: A two-dimensional data table where the first header cell is empty and marked with a TD. Uses th and scope with col and row on THs.

Table 2a: Greensprings Running Club Personal Bests
1 mile 5 km 10 km
Mary 8:32 28:04 1:01:16
Betsy 7:43 26:47 55:38
Matt 7:55 27:29 57:04
Todd 7:01 24:21 50:35

Results:

NVDA 2015.2 / Firefox 40: good

JAWS 15 / IE 11: good

VoiceOver / Mac OSx 10.9.5: shifts row and column headers

VoiceOver / iPad iOS 8.3: shifts row and column headers

Table 2b: A two-dimensional data table where the first header cell contains a non-breaking space and marked with a TD. Uses th and scope with col and row.

Table 2b: Greensprings Running Club Personal Bests
  1 mile 5 km 10 km
Mary 8:32 28:04 1:01:16
Betsy 7:43 26:47 55:38
Matt 7:55 27:29 57:04
Todd 7:01 24:21 50:35

Results:

NVDA 2015.2 / Firefox 40: good

JAWS 15 / IE 11: good

VoiceOver / Mac OSx 10.9.5: shifts row and column headers

VoiceOver / iPad iOS 8.3: shifts row and column headers

Table 3a: A two-dimensional data table where the first header cell is empty and marked with a TH and no scope. Uses th and scope with col and row.

Table 3a: Greensprings Running Club Personal Bests
1 mile 5 km 10 km
Mary 8:32 28:04 1:01:16
Betsy 7:43 26:47 55:38
Matt 7:55 27:29 57:04
Todd 7:01 24:21 50:35

Results:

NVDA 2015.2 / Firefox 40: good

JAWS 15 / IE 11: good

VoiceOver / Mac OSx 10.9.5: good

VoiceOver / iPad iOS 8.3: good

Table 3b: A two-dimensional data table where the first header cell contains a non-breaking space and marked with a TH and no scope. Uses th and scope with col and row on THs.

Table 3b: Greensprings Running Club Personal Bests
  1 mile 5 km 10 km
Mary 8:32 28:04 1:01:16
Betsy 7:43 26:47 55:38
Matt 7:55 27:29 57:04
Todd 7:01 24:21 50:35

Results:

NVDA 2015.2 / Firefox 40: good

JAWS 15 / IE 11: good

VoiceOver / Mac OSx 10.9.5: good

VoiceOver / iPad iOS 8.3: good

Table 4a: A two-dimensional data table where the first header cell is empty and marked with a TH and scope. Uses th and scope with col and row.

Table 4a: Greensprings Running Club Personal Bests
1 mile 5 km 10 km
Mary 8:32 28:04 1:01:16
Betsy 7:43 26:47 55:38
Matt 7:55 27:29 57:04
Todd 7:01 24:21 50:35

Results:

NVDA 2015.2 / Firefox 40: good

JAWS 15 / IE 11: good

VoiceOver / Mac OSx 10.9.5: good

VoiceOver / iPad iOS 8.3: good

Table 4b: A two-dimensional data table where the first header cell contains a non-breaking space and marked with a TH and scope. Uses th and scope with col and row.

Table 4b: Greensprings Running Club Personal Bests
  1 mile 5 km 10 km
Mary 8:32 28:04 1:01:16
Betsy 7:43 26:47 55:38
Matt 7:55 27:29 57:04
Todd 7:01 24:21 50:35

Results:

NVDA 2015.2 / Firefox 40: good

JAWS 15 / IE 11: good

VoiceOver / Mac OSx 10.9.5: good

VoiceOver / iPad iOS 8.3: good

Testing tables where the row headings are in the second column

Table 5: Use of th, and scope with col and row for a two-dimensional table where the row headings are in the second column.

Table 5: Contact Information
Index Name Phone# Fax# City
1. Joel Garner 412-212-5421 412-212-5400 Pittsburgh
2. Clive Lloyd 410-306-1420 410-306-5400 Baltimore
3. Gordon Greenidge 281-564-6720 281-511-6600 Houston

Results:

NVDA 2015.2 / Firefox 40: reads properly except that the cells in column 1 do not recognize the row headers in column 2

JAWS 15 / IE 11: reads properly exept that the cells in column 1 do not recognize the row headers in column 2

VoiceOver / Mac OSx 10.9.5: does not recognize the row headers for any cells

VoiceOver / iPad iOS 8.3: does not recognize the row headers for any cells

Testing complex tables with multiple levels of row headers using scope

Table 6: Use of th and scope with rowgroup for tables with multiple levels of row headers. First (empty) cell is a TD.

Table 6: Greensprings Running Club Personal Bests
  1 mile 5 km 10 km
Females Mary 8:32 28:04 1:01:16
Betsy 7:43 26:47 55:38
Males Matt 7:55 27:29 57:04
Todd 7:01 24:21 50:35

Results:

NVDA 2015.2 / Firefox 40: good

JAWS 15 / IE 11: good - but doesn't read "Female" on Betsy when arrowing up into the cell from the Male cells

VoiceOver / Mac OSx 10.9.5: totally messed up

VoiceOver / iPad iOS 8.3: totally messed up

Table 7: Use of th and scope with rowgroup for table with multiple rows of headers. First (empty) cell is a TH.

Table 7: Greensprings Running Club Personal Bests
  1 mile 5 km 10 km
Females Mary 8:32 28:04 1:01:16
Betsy 7:43 26:47 55:38
Males Matt 7:55 27:29 57:04
Todd 7:01 24:21 50:35

Results:

NVDA 2015.2 / Firefox 40: good

JAWS 15 / IE 11: good - but doesn't read "Female" on Betsy when arrowing up into the cell from the Male cells

VoiceOver / Mac OSx 10.9.5: column headers read fine. row headers are off: row 2 header= Females, row 3 header=Betsy, row 4 header=Males, row 5 header=Todd

VoiceOver / iPad iOS 8.3: column headers read fine. row headers are off: row 2 header= Females, row 3 header=Betsy, row 4 header=Males, row 5 header=Todd

Testing complex tables with multiple levels of column headers using scope

Table 8: Use of th and scope with colgroup for table with multiple levels of column headers. First (empty) cell is a TD.

Table 8: Greensprings Running Club Personal Bests
  Females Males
Mary Betsy Matt Todd
1 mile 8:32 7:43 7:55 7:01
5 km 28:04 26:47 27:27 24:21
10 km 1:01:16 55:38 57:04 50:35

Results:

NVDA 2015.2 / Firefox 40: good

JAWS 15 / IE 11: good

VoiceOver / Mac OSx 10.9.5: totally messed up

VoiceOver / iPad iOS 8.3: totally messed up

Table 9: Use of th and scope with colgroup for table with multiple levels of column headers. First (empty) cell is a TH.

Table 9: Greensprings Running Club Personal Bests
  Females Males
Mary Betsy Matt Todd
1 mile 8:32 7:43 7:55 7:01
5 km 28:04 26:47 27:27 24:21
10 km 1:01:16 55:38 57:04 50:35

Results:

NVDA 2015.2 / Firefox 40: good

JAWS 15 / IE 11: good

VoiceOver / Mac OSx 10.9.5: ignores the second header row (Mary, Betsy, Matt, Todd)

VoiceOver / iPad iOS 8.3: ignores the second header row (Mary, Betsy, Matt, Todd)

Testing complex tables with multiple levels of row headers using ID and headers

Table 10: Use of id and headers for a table with multiple levels of row headers. First (empty) cell is a TD.

Table 10: Greensprings Running Club Personal Bests
  1 mile 5 km 10 km
Females Mary 8:32 28:04 1:01:16
Betsy 7:43 26:47 55:38
Males Matt 7:55 27:29 57:04
Todd 7:01 24:21 50:35

Results:

NVDA 2015.2 / Firefox 40: good

JAWS 15 / IE 11: good - but doesn't read "Female" on Betsy when arrowing up into the cell from the Male cells

VoiceOver / Mac OSx 10.9.5: totally messed up

VoiceOver / iPad iOS 8.3: totally messed up

Table 11a: Use of id and headers for a table with multiple levels of row headers. First (empty) cell is a TH.

Table 11a: Greensprings Running Club Personal Bests
  1 mile 5 km 10 km
Females Mary 8:32 28:04 1:01:16
Betsy 7:43 26:47 55:38
Males Matt 7:55 27:29 57:04
Todd 7:01 24:21 50:35

Results:

NVDA 2015.2 / Firefox 40: good

JAWS 15 / IE 11: good - but doesn't read "Female" on Betsy when arrowing up into the cell from the Male cells

VoiceOver / Mac OSx 10.9.5: column headers read fine. row headers are off: row 2 header= Females, row 3 header=Betsy, row 4 header=Males, row 5 header=Todd

VoiceOver / iPad iOS 8.3: column headers read fine. row headers are off: row 2 header= Females, row 3 header=Betsy, row 4 header=Males, row 5 header=Todd

Table 11b: Use of id and headers for a table with multiple levels of row headers. Non empty first cell.

Table 11b: Greensprings Running Club Personal Bests
x 1 mile 5 km 10 km
Females Mary 8:32 28:04 1:01:16
Betsy 7:43 26:47 55:38
Males Matt 7:55 27:29 57:04
Todd 7:01 24:21 50:35

Results:

NVDA 2015.2 / Firefox 40: good

JAWS 15 / IE 11: good - but doesn't read "Female" on Betsy when arrowing up into the cell from the Male cells

VoiceOver / Mac OSx 10.9.5: column headers read fine. row headers are off: row 2 header= Females, row 3 header=Betsy, row 4 header=Males, row 5 header=Todd

VoiceOver / iPad iOS 8.3: column headers read fine. row headers are off: row 2 header= Females, row 3 header=Betsy, row 4 header=Males, row 5 header=Todd

Testing complex tables with multiple levels of column headers using ID and headers

Table 12: Use of id and headers for a table with multiple levels of column of headers. First (empty) cell is a TD.

Table 12: Greensprings Running Club Personal Bests
  Females Males
Mary Betsy Matt Todd
1 mile 8:32 7:43 7:55 7:01
5 km 28:04 26:47 27:27 24:21
10 km 1:01:16 55:38 57:04 50:35

Results:

NVDA 2015.2 / Firefox 40: the header cells are recognized properly by NVDA; however, they are not read when expected to be read. As you move from "1 mile" to the right across the row, "1 mile" is read as the header for each cell instead of the column headers. Likewise, moving down a column reads the column header(s) each time instead of the row headers as they change.

JAWS 15 / IE 11: good

VoiceOver / Mac OSx 10.9.5: totally messed up

VoiceOver / iPad iOS 8.3: totally messed up

Table 13a: Use of id and headers for a table with multiple levels of column of headers. First (empty) cell is a TH.

Table 13a: Greensprings Running Club Personal Bests
  Females Males
Mary Betsy Matt Todd
1 mile 8:32 7:43 7:55 7:01
5 km 28:04 26:47 27:27 24:21
10 km 1:01:16 55:38 57:04 50:35

Results:

NVDA 2015.2 / Firefox 40: the header cells are recognized properly by NVDA; however, they are not read when expected to be read. As you move from "1 mile" to the right across the row, "1 mile" is read as the header for each cell instead of the column headers. Likewise, moving down a column reads the column header(s) each time instead of the row headers as they change.

JAWS 15 / IE 11: good

VoiceOver / Mac OSx 10.9.5: ignores the second header row (Mary, Betsy, Matt, Todd)

VoiceOver / iPad iOS 8.3: ignores the second header row (Mary, Betsy, Matt, Todd)

Table 13b: Use of id and headers for a table with multiple levels of column of headers. Non empty first cell.

Table 13b: Greensprings Running Club Personal Bests
x Females Males
Mary Betsy Matt Todd
1 mile 8:32 7:43 7:55 7:01
5 km 28:04 26:47 27:27 24:21
10 km 1:01:16 55:38 57:04 50:35

Results:

NVDA 2015.2 / Firefox 40: the header cells are recognized properly by NVDA; however, they are not read when expected to be read. As you move from "1 mile" to the right across the row, "1 mile" is read as the header for each cell instead of the column headers. Likewise, moving down a column reads the column header(s) each time instead of the row headers as they change.

JAWS 15 / IE 11: good

VoiceOver / Mac OSx 10.9.5: ignores the second header row (Mary, Betsy, Matt, Todd)

VoiceOver / iPad iOS 8.3: ignores the second header row (Mary, Betsy, Matt, Todd)

Contributors

Melanie Philipp

end here