My group usually doesn't handle web testing, but for this project some of it falls on me and I'm working out automation as I go. The site isn't public, or I'd just provide it for reference.
Using Selenium 2 and Python, I've managed to make some requested tests by reading documentation (and stack exchange) but I've hit a wall on checking text strings across languages.
There's an always-present language selector element on the site that provides a menu of supported languages and changes the display language for text throughout the site. All of the CSS selectors used stay the same throughout these language changes.
I know better than to make a separate copy of the test case for each language, since that will make updating and bugfixing too complicated. I'm not really sure what to do instead, though.
My best guess so far is to base the test around the language selector's current setting; set it at the start of the test and then use a string of if/elif statements to handle the string in each possible language. That at least works, but it feels clunky and overcomplicated.
What better ways are there to structure a test case for a situation like this?
import os
dir = os.path.dirname(__file__)
chrome_driver_path = [[the file path]]
import unittest
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
lang = [[the CSS selector for the language change element]]
site_lng = eng #can be eng/fra/ita/ger/spa
class chrome_english(unittest.TestCase):
@classmethod
def setUpClass(cls):
cls.driver = webdriver.Chrome(chrome_driver_path)
cls.driver.maximize_window()
cls.driver.get("https://www.url.com/"+site_lng+"/main")
# wait for main logo or tests run before page elements have loaded
WebDriverWait(cls.driver, 20).until(EC.presence_of_element_located((By.ID, "logo-large")))
@classmethod
def tearDownClass(cls):
cls.driver.close()
def test_navLeft_03(self):
e = self.driver.find_element_by_css_selector('div.menu-main>div:nth-child(2)>a').text
if self.driver.find_element_by_css_selector(lang).text=="ENGLISH":
self.assertEqual(e, 'News')
elif self.driver.find_element_by_css_selector(lang).text=="FRANCAIS":
self.assertEqual(e, 'Actualités')
elif self.driver.find_element_by_css_selector(lang).text=="ITALIANO":
self.assertEqual(e, 'Notizie')
elif self.driver.find_element_by_css_selector(lang).text=="DEUTCH":
self.assertEqual(e, 'Neuigkeiten')
elif self.driver.find_element_by_css_selector(lang).text=="ESPANOL":
self.assertEqual(e, 'Noticias')