#!/usr/bin/env python3 # SPDX-License-Identifier: MIT # SPDX-FileCopyrightText: 2021-2022 Harald Sitter # SPDX-FileCopyrightText: 2023 Marco Martin import unittest from appium import webdriver from appium.webdriver.common.appiumby import AppiumBy from appium.options.common.base import AppiumOptions from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.common.keys import Keys from selenium.webdriver.common.by import By from selenium.webdriver.common.action_chains import ActionChains from selenium.webdriver.support import expected_conditions as EC import time import os import sys import time class DolphinTests(unittest.TestCase): @classmethod def setUpClass(self): options = AppiumOptions() options.set_capability("timeouts", {'implicit': 10000}) options.set_capability("app", "org.kde.dolphin.desktop") options.set_capability("environ", { "LC_ALL": "en_US.UTF-8", }) self.driver = webdriver.Remote( command_executor='http://127.0.0.1:4723', options=options) self.driver.implicitly_wait = 10 filename = "{}/testDir/test1.txt".format(os.environ["HOME"]) os.makedirs(os.path.dirname(filename), exist_ok=True) with open(filename, "w") as f: f.write("Test File 1") filename = "{}/testDir/test2.txt".format(os.environ["HOME"]) with open(filename, "w") as f: f.write("Test File 2") def tearDown(self): if not self._outcome.result.wasSuccessful(): self.driver.get_screenshot_as_file("failed_test_shot_{}.png".format(self.id())) @classmethod def tearDownClass(self): os.remove("{}/testDir/test1.txt".format(os.environ["HOME"])) os.remove("{}/testDir/test2.txt".format(os.environ["HOME"])) os.rmdir("{}/testDir".format(os.environ["HOME"])) self.driver.quit() def assertResult(self, actual, expected): wait = WebDriverWait(self.driver, 20) wait.until(lambda x: self.getresults() == expected) self.assertEqual(self.getresults(), expected) def test_1_location(self): editButton = self.driver.find_element(by=AppiumBy.ACCESSIBILITY_ID, value="KUrlNavigatorToggleButton") editButton.click() # clear contents self.driver.find_element(by=AppiumBy.ACCESSIBILITY_ID, value="DolphinUrlNavigator.KUrlComboBox.KLineEdit.QLineEditIconButton").click() locationBar = self.driver.find_element(by=AppiumBy.ACCESSIBILITY_ID, value="DolphinUrlNavigator.KUrlComboBox.KLineEdit") locationBar.send_keys("{}/testDir".format(os.environ["HOME"])) editButton.click() elements = self.driver.find_elements(by=AppiumBy.XPATH, value="//table_cell") self.assertEqual(len(elements), 2) self.assertEqual(elements[0].text, "test1.txt") self.assertEqual(elements[1].text, "test2.txt") def test_2_filter_bar(self): ActionChains(self.driver).send_keys(Keys.DIVIDE).perform() searchField = self.driver.find_element(by=AppiumBy.ACCESSIBILITY_ID, value="Filter.QScrollArea.qt_scrollarea_viewport.QWidget.FilterLineEdit") searchField.send_keys("test2.txt") self.assertEqual(searchField.text, "test2.txt") elements = self.driver.find_elements(by=AppiumBy.XPATH, value="//table_cell") self.assertEqual(len(elements), 1) self.assertEqual(elements[0].text, "test2.txt") # should see both files now buttons = self.driver.find_elements(by=AppiumBy.ACCESSIBILITY_ID, value="Filter.QScrollArea.qt_scrollarea_viewport.QWidget.QToolButton") self.assertEqual(len(buttons), 2) # close buttion is the second QToolButton close_button=buttons[1] self.assertIsNotNone(close_button) close_button.click() elements = self.driver.find_elements(by=AppiumBy.XPATH, value="//table_cell") self.assertEqual(len(elements), 2) self.assertEqual(elements[0].text, "test1.txt") self.assertEqual(elements[1].text, "test2.txt") def test_3_autovalidate_url(self): dolphinBackground = self.driver.find_element( by=AppiumBy.ACCESSIBILITY_ID, value="DolphinViewContainer.DolphinView.KItemListContainer" ) editButton = self.driver.find_element(by=AppiumBy.ACCESSIBILITY_ID, value="KUrlNavigatorToggleButton") editButton.click() # clear contents clearButton = self.driver.find_element(by=AppiumBy.ACCESSIBILITY_ID, value="DolphinUrlNavigator.KUrlComboBox.KLineEdit.QLineEditIconButton") clearButton.click() locationBar = self.driver.find_element(by=AppiumBy.ACCESSIBILITY_ID, value="DolphinUrlNavigator.KUrlComboBox.KLineEdit") locationBar.send_keys("{}/testDir".format(os.environ["HOME"])) # Move to the bottom right at 50px of the border to ensure not clicking on items rect = dolphinBackground.rect x = rect['width'] - 50 y = rect['height'] - 50 actions = ActionChains(self.driver) actions.move_to_element_with_offset(dolphinBackground, x, y).click().perform() # Check if the button visible on edit mode has been hidden self.assertFalse(clearButton.is_displayed()) elements = self.driver.find_elements(by=AppiumBy.XPATH, value="//table_cell") self.assertEqual(len(elements), 2) self.assertEqual(elements[0].text, "test1.txt") self.assertEqual(elements[1].text, "test2.txt") """ def test_search_bar(self): ActionChains(self.driver).key_down(Keys.CONTROL).send_keys("f").key_up(Keys.CONTROL).perform() #self.driver.pause(0.1) searchField = self.driver.find_element(by=AppiumBy.ACCESSIBILITY_ID, value="DolphinSearchBox.QScrollArea.qt_scrollarea_viewport.QWidget.searchField") searchField.send_keys("test1.txt") self.assertEqual(searchField.text, "test1.txt") # TODO the search does not work, filenamesearch:/ does not return any result time.sleep(1) elements = self.driver.find_elements(by=AppiumBy.XPATH, value="//table_cell") self.assertEqual(len(elements), 1) self.assertEqual(elements[0].text, "test1.txt") # click on leave search self.driver.find_element(by=AppiumBy.ACCESSIBILITY_ID, value="DolphinSearchBox.QScrollArea.qt_scrollarea_viewport.QWidget.QToolButton").click() # should see both files now elements = self.driver.find_elements(by=AppiumBy.XPATH, value="//table_cell") self.assertEqual(len(elements), 2) self.assertEqual(elements[0].text, "test2.txt") self.assertEqual(elements[1].text, "test1.txt") """ if __name__ == '__main__': suite = unittest.TestLoader().loadTestsFromTestCase(DolphinTests) unittest.TextTestRunner(verbosity=2).run(suite)