Back to Repositories

Testing Clipboard Operations Implementation in NW.js

This test suite implements comprehensive clipboard functionality testing for NW.js using Selenium WebDriver and Python. It validates core clipboard operations including getting text, setting text, and clearing clipboard content through automated browser interactions.

Test Coverage Overview

The test suite provides thorough coverage of clipboard operations in NW.js applications.

Key areas tested include:
  • Retrieving text from clipboard
  • Setting new text content to clipboard
  • Clearing clipboard contents
  • Verifying clipboard state after operations

Implementation Analysis

The implementation utilizes Selenium WebDriver with Python to automate clipboard testing. It employs a modular approach with separate test functions for each clipboard operation, using JavaScript execution to interact with the clipboard API.

Notable patterns include:
  • DOM-based assertions for verification
  • JavaScript bridge for clipboard operations
  • Isolated test cases with clear setup/teardown

Technical Details

Testing infrastructure includes:
  • Selenium WebDriver for browser automation
  • Chrome Options configuration for NW.js app context
  • Custom assertion helpers for DOM verification
  • JavaScript execution bridge for clipboard operations
  • Automatic driver cleanup in finally block

Best Practices Demonstrated

The test suite exemplifies several testing best practices:

  • Modular test function organization
  • Robust error handling and cleanup
  • Clear assertion messages and verification
  • Consistent testing patterns across operations
  • Proper test isolation and setup

nwjs/nwJs

test/sanity/clipboard/test.py

            
import time
import os

from selenium import webdriver
from selenium.webdriver.chrome.options import Options
chrome_options = Options()
chrome_options.add_argument("nwapp=" + os.path.dirname(os.path.abspath(__file__)))

def assert_dom(id, expect):
    elem = driver.find_element_by_id(id)
    print(elem.get_attribute('innerHTML'))
    assert(expect in elem.get_attribute('innerHTML'))

def assert_dom_not(id, not_expect):
    elem = driver.find_element_by_id(id)
    print(elem.get_attribute('innerHTML'))
    assert(not_expect not in elem.get_attribute('innerHTML'))

def test_get_text():
  id = 'test-get-text'
  script = 'getText("%s")' % id
  print(script)
  driver.execute_script(script)
  assert_dom(id, 'success')

def test_set_text():
  id = 'test-set-text-1'
  value = 'abc'
  script = 'setText("%s", "%s")' % (id, value)
  print(script)
  driver.execute_script(script)
  assert_dom(id, 'success')
  id = 'test-set-text-2'
  script = 'getText("%s")' % id
  print(script)
  driver.execute_script(script)
  assert_dom(id, 'success')
  assert_dom(id, value)

def test_clear():
  id = 'test-clear-1'
  value = 'abc'
  script = 'setText("%s", "%s")' % (id, value)
  print(script)
  driver.execute_script(script)
  assert_dom(id, 'success')
  id = 'test-clear-2'
  script = 'getText("%s")' % id
  print(script)
  driver.execute_script(script)
  assert_dom(id, 'success')
  assert_dom(id, value)
  id = 'test-clear-3'
  script = 'clearClipboard("%s")' % id
  print(script)
  driver.execute_script(script)
  assert_dom(id, 'success')
  id = 'test-clear-4'
  value = 'abc'
  script = 'getText("%s")' % id
  print(script)
  driver.execute_script(script)
  assert_dom_not(id, value) 

driver = webdriver.Chrome(executable_path=os.environ['CHROMEDRIVER'], chrome_options=chrome_options)
driver.implicitly_wait(5)
try:
    print(driver.current_url)

    test_get_text()
    test_set_text()
    test_clear()   
finally:
    driver.quit()