Best Python code snippet using autotest_python
test_toastertable_ui.py
Source:test_toastertable_ui.py
1#! /usr/bin/env python2# ex:ts=4:sw=4:sts=4:et3# -*- tab-width: 4; c-basic-offset: 4; indent-tabs-mode: nil -*-4#5# BitBake Toaster Implementation6#7# Copyright (C) 2013-2016 Intel Corporation8#9# This program is free software; you can redistribute it and/or modify10# it under the terms of the GNU General Public License version 2 as11# published by the Free Software Foundation.12#13# This program is distributed in the hope that it will be useful,14# but WITHOUT ANY WARRANTY; without even the implied warranty of15# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the16# GNU General Public License for more details.17#18# You should have received a copy of the GNU General Public License along19# with this program; if not, write to the Free Software Foundation, Inc.,20# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.21from datetime import datetime22from django.core.urlresolvers import reverse23from django.utils import timezone24from tests.browser.selenium_helpers import SeleniumTestCase25from orm.models import BitbakeVersion, Release, Project, Build26class TestToasterTableUI(SeleniumTestCase):27 """28 Tests for the UI elements of ToasterTable (sorting etc.);29 note that the tests cover generic functionality of ToasterTable which30 manifests as UI elements in the browser, and can only be tested via31 Selenium.32 """33 def setUp(self):34 pass35 def _get_orderby_heading(self, table):36 """37 Get the current order by finding the column heading in <table> with38 the sorted class on it.39 table: WebElement for a ToasterTable40 """41 selector = 'thead a.sorted'42 heading = table.find_element_by_css_selector(selector)43 return heading.get_attribute('innerHTML').strip()44 def _get_datetime_from_cell(self, row, selector):45 """46 Return the value in the cell selected by <selector> on <row> as a47 datetime.48 row: <tr> WebElement for a row in the ToasterTable49 selector: CSS selector to use to find the cell containing the date time50 string51 """52 cell = row.find_element_by_css_selector(selector)53 cell_text = cell.get_attribute('innerHTML').strip()54 return datetime.strptime(cell_text, '%d/%m/%y %H:%M')55 def test_revert_orderby(self):56 """57 Test that sort order for a table reverts to the default sort order58 if the current sort column is hidden.59 """60 now = timezone.now()61 later = now + timezone.timedelta(hours=1)62 even_later = later + timezone.timedelta(hours=1)63 bbv = BitbakeVersion.objects.create(name='test bbv', giturl='/tmp/',64 branch='master', dirpath='')65 release = Release.objects.create(name='test release',66 branch_name='master',67 bitbake_version=bbv)68 project = Project.objects.create_project('project', release)69 # set up two builds which will order differently when sorted by70 # started_on or completed_on71 # started first, finished last72 build1 = Build.objects.create(project=project,73 started_on=now,74 completed_on=even_later,75 outcome=Build.SUCCEEDED)76 # started second, finished first77 build2 = Build.objects.create(project=project,78 started_on=later,79 completed_on=later,80 outcome=Build.SUCCEEDED)81 url = reverse('all-builds')82 self.get(url)83 table = self.wait_until_visible('#allbuildstable')84 # check ordering (default is by -completed_on); so build1 should be85 # first as it finished last86 active_heading = self._get_orderby_heading(table)87 self.assertEqual(active_heading, 'Completed on',88 'table should be sorted by "Completed on" by default')89 row_selector = '#allbuildstable tbody tr'90 cell_selector = 'td.completed_on'91 rows = self.find_all(row_selector)92 row1_completed_on = self._get_datetime_from_cell(rows[0], cell_selector)93 row2_completed_on = self._get_datetime_from_cell(rows[1], cell_selector)94 self.assertTrue(row1_completed_on > row2_completed_on,95 'table should be sorted by -completed_on')96 # turn on started_on column97 self.click('#edit-columns-button')98 self.click('#checkbox-started_on')99 # sort by started_on column100 links = table.find_elements_by_css_selector('th.started_on a')101 for link in links:102 if link.get_attribute('innerHTML').strip() == 'Started on':103 link.click()104 break105 # wait for table data to reload in response to new sort106 self.wait_until_visible('#allbuildstable')107 # check ordering; build1 should be first108 active_heading = self._get_orderby_heading(table)109 self.assertEqual(active_heading, 'Started on',110 'table should be sorted by "Started on"')111 cell_selector = 'td.started_on'112 rows = self.find_all(row_selector)113 row1_started_on = self._get_datetime_from_cell(rows[0], cell_selector)114 row2_started_on = self._get_datetime_from_cell(rows[1], cell_selector)115 self.assertTrue(row1_started_on < row2_started_on,116 'table should be sorted by started_on')117 # turn off started_on column118 self.click('#edit-columns-button')119 self.click('#checkbox-started_on')120 # wait for table data to reload in response to new sort121 self.wait_until_visible('#allbuildstable')122 # check ordering (should revert to completed_on); build2 should be first123 active_heading = self._get_orderby_heading(table)124 self.assertEqual(active_heading, 'Completed on',125 'table should be sorted by "Completed on" after hiding sort column')126 cell_selector = 'td.completed_on'127 rows = self.find_all(row_selector)128 row1_completed_on = self._get_datetime_from_cell(rows[0], cell_selector)129 row2_completed_on = self._get_datetime_from_cell(rows[1], cell_selector)130 self.assertTrue(row1_completed_on > row2_completed_on,...
Learn to execute automation testing from scratch with LambdaTest Learning Hub. Right from setting up the prerequisites to run your first automation test, to following best practices and diving deeper into advanced test scenarios. LambdaTest Learning Hubs compile a list of step-by-step guides to help you be proficient with different test automation frameworks i.e. Selenium, Cypress, TestNG etc.
You could also refer to video tutorials over LambdaTest YouTube channel to get step by step demonstration from industry experts.
Get 100 minutes of automation test minutes FREE!!