mirror of
				https://github.com/gristlabs/grist-core.git
				synced 2025-06-13 20:53:59 +00:00 
			
		
		
		
	(core) start migrating old tests to work with newer selenium
Summary: We have an important batch of old browser tests that depend on a pseudo-promise manager selenium's node client used to have. That manager was dropped in v4 (see changelog https://github.com/SeleniumHQ/selenium/blob/trunk/javascript/node/selenium-webdriver/CHANGES.md). I tried porting some wholesale to our newer style of writing tests, and it is a bit of a bear (and would also be hard work to review). So instead I tried something else: remapping the `webdriverjq` implementation to work with mocha-webdriver. This works pretty well. Some API differences are hard to reconcile, but so far most test code just needs async/await changes to port, meaning a lot less thinking, and probably easier to review overall. The important property of the ports tests is that they no longer import or require `selenium-webdriver`. mocha-webdriver depends on selenium-webdriver, but a newer version. I haven't tried dealing with types, since that doesn't matter much - these tests aren't under active development, they are just important for preventing regressions. Follow up work would be porting the remainder of the tests which, while a slog, I'm hoping is no longer a quagmire. Once the tests are ported, I'd propose moving them to `core`. Test Plan: Test porting Reviewers: georgegevoian Reviewed By: georgegevoian Differential Revision: https://phab.getgrist.com/D3825
This commit is contained in:
		
							parent
							
								
									6485fbd826
								
							
						
					
					
						commit
						f59c1edf16
					
				@ -358,8 +358,17 @@ export async function getVisibleGridCellsFast(colOrOptions: any, rowNums?: numbe
 | 
			
		||||
export async function getVisibleDetailCells(col: number|string, rows: number[], section?: string): Promise<string[]>;
 | 
			
		||||
export async function getVisibleDetailCells<T = string>(options: IColSelect<T>): Promise<T[]>;
 | 
			
		||||
export async function getVisibleDetailCells<T>(
 | 
			
		||||
  colOrOptions: number|string|IColSelect<T>, _rowNums?: number[], _section?: string
 | 
			
		||||
  colOrOptions: number|string|IColSelect<T>|IColsSelect<T>, _rowNums?: number[], _section?: string
 | 
			
		||||
): Promise<T[]> {
 | 
			
		||||
 | 
			
		||||
  if (typeof colOrOptions === 'object' && 'cols' in colOrOptions) {
 | 
			
		||||
    const {rowNums, section, mapper} = colOrOptions;    // tslint:disable-line:no-shadowed-variable
 | 
			
		||||
    const columns = await Promise.all(colOrOptions.cols.map((oneCol) =>
 | 
			
		||||
      getVisibleDetailCells({col: oneCol, rowNums, section, mapper})));
 | 
			
		||||
    // This zips column-wise data into a flat row-wise array of values.
 | 
			
		||||
    return ([] as T[]).concat(...rowNums.map((r, i) => columns.map((c) => c[i])));
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  const {col, rowNums, section, mapper = el => el.getText()}: IColSelect<any> = (
 | 
			
		||||
    typeof colOrOptions === 'object' ? colOrOptions :
 | 
			
		||||
    { col: colOrOptions, rowNums: _rowNums!, section: _section}
 | 
			
		||||
@ -483,12 +492,13 @@ export async function getCardCount(): Promise<number> {
 | 
			
		||||
 * Return the .column-name element for the specified column, which may be specified by full name
 | 
			
		||||
 * or index, and may include a section (or will use the active section by default).
 | 
			
		||||
 */
 | 
			
		||||
export function getColumnHeader(colOptions: IColHeader): WebElementPromise {
 | 
			
		||||
export function getColumnHeader(colOrColOptions: string|IColHeader): WebElementPromise {
 | 
			
		||||
  const colOptions = typeof colOrColOptions === 'string' ? {col: colOrColOptions} : colOrColOptions;
 | 
			
		||||
  const {col, section} = colOptions;
 | 
			
		||||
  const sectionElem = section ? getSection(section) : driver.findWait('.active_section', 4000);
 | 
			
		||||
  return new WebElementPromise(driver, typeof col === 'number' ?
 | 
			
		||||
    sectionElem.find(`.column_name:nth-child(${col + 1})`) :
 | 
			
		||||
    sectionElem.findContent('.column_name', exactMatch(col)));
 | 
			
		||||
    sectionElem.findContent('.column_name .kf_elabel_text', exactMatch(col)).findClosest('.column_name'));
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
export async function getColumnNames() {
 | 
			
		||||
 | 
			
		||||
		Loading…
	
		Reference in New Issue
	
	Block a user