From 3b2fdcf256abf6b7038810250aec552fe26399ec Mon Sep 17 00:00:00 2001 From: Tatu Aalto Date: Fri, 5 Apr 2024 22:39:22 +0300 Subject: [PATCH 1/4] fix: remove space from translated keyword --- robotframework_browser_translation_fi/translation.json | 8 ++++---- utest/test_translation.py | 3 ++- 2 files changed, 6 insertions(+), 5 deletions(-) diff --git a/robotframework_browser_translation_fi/translation.json b/robotframework_browser_translation_fi/translation.json index a7e6271..26f09b6 100644 --- a/robotframework_browser_translation_fi/translation.json +++ b/robotframework_browser_translation_fi/translation.json @@ -193,15 +193,15 @@ "doc": "Suorittaa annetun JavaScript-koodin valituilla elementeillä tai sivulla.\n\n | =Argumentit= | =Kuvaus= |\n | ``selector`` | Valitsin, joka ratkaistaan ja välitetään JavaScript-funktiolle. Tämä on ensimmäinen argumentti, jonka funktio vastaanottaa, jos ei ole ``${None}``. ``selector`` on valinnainen ja sitä voidaan jättää pois. Jos annetaan valitsin, funktio on välttämätön, jossa on argumentti elementin käsittelijän tallentamiseksi. Esimerkiksi ``(elementti) => document.activeElement === elementti`` Katso `Elementtien löytäminen` -osio lisätietoja valitsimista. |\n | ``*funktio`` | Kelvollinen JavaScript-funktio tai JavaScript-funktion runko. Näitä argumentteja voidaan käyttää luettavan monirivisen JavaScriptin kirjoittamiseen. |\n | ``arg`` | Lisäargumentti, joka voidaan välittää JavaScript-funktiolle. Tämän argumentin on oltava JSON-sarjoitettavissa. Elementtikäsittelijöitä ei tueta. |\n | ``all_elements`` | Määrittää, annetaanko funktiolle vain yksi valitsimella löydetty elementtikäsittelijä vai jos asetettu arvoon ``True``, kaikki löydetyt elementit annetaan taulukkona. |\n\n Esimerkki ``all_elements=True``:n kanssa:\n | ${tekstit}= Arvioi JavaScript painike\n | ... (elementit, arg) => {\n | ... let teksti = []\n | ... for (e of elementit) {\n | ... console.log(e.innerText)\n | ... teksti.push(e.innerText)\n | ... }\n | ... teksti.push(arg)\n | ... return teksti\n | ... }\n | ... all_elements=True\n | ... arg=Vain toinen teksti\n\n Avainsana käyttää tiukkaa tilaa, jos ``all_elements`` on ``False``. Katso `Elementtien löytäminen` lisätietoja tiukasta tilasta.\n\n [https://github.com/MarketSquare/robotframework-browser/tree/main/atest/test/06_Examples/js_evaluation.robot | Käyttöesimerkit. ]\n\n [https://forum.robotframework.org/t//4251|Kommentti >>]\n " }, "highlight_elements": { - "name": "korosta elementtejä", + "name": "korosta_elementtejä", "doc": "Lisää korostuksen elementteihin, jotka vastaavat ``selector``-valitsinta. Tarjoaa tyylisäädön.\n\n Palauttaa korostettujen elementtien lukumäärän. Avainsana ei epäonnistu, jos `locator` ei vastaa yhtäkään elementtiä\n sivulla. Avainsana ei vieritä elementtejä näkymään, ja korostettu elementti voi olla näkymän ulkopuolella. Käytä `Scroll To Element`-avainsanaa vierittääksesi elementti näkymään.\n\n | =Argumentit= | =Kuvaus= |\n | ``selector`` | Valitsimet, jotka halutaan korostaa. Katso `Elementtien etsiminen` -osio tarkempien valitsintietojen saamiseksi. |\n | ``duration`` | Määrittää kuinka kauan valitsin pysyy korostettuna. Oletusarvoisesti ``5s`` => 5 sekuntia. |\n | ``width`` | Asettaa korostuksen reunuksen leveyden. Oletusarvo on 2px. |\n | ``style`` | Asettaa reunuksen tyylin. Oletusarvo on pisteviiva. |\n | ``color`` | Asettaa reunuksen värin. Kelvollisia värejä ovat esimerkiksi: ``red``, ``blue``, ``yellow``, ``pink``, ``black`` |\n\n Avainsana ei epäonnistu, vaikka valitsin ratkaisisi useisiin elementteihin.\n\n Esimerkki:\n | `Korosta elementit` input#kirjautumispainike kesto=200ms\n | ${lukumäärä} = `Korosta elementit` input#kirjautumispainike kesto=200ms leveys=4px tyyli=solid väri=\\#FF00FF\n | Pitäisi olla yhtä suuri ${lukumäärä} ${5}\n\n [https://forum.robotframework.org/t//4294|Kommentti >>]\n " }, "set_assertion_formatters": { - "name": "aseta väitteen muotoilijat", + "name": "aseta_väitteen_muotoilijat", "doc": "Aseta väitteiden muotoilijat avainsanoille.\n\n | =Argumentit= | =Kuvaus= |\n | ``formatters`` | Avainsanojen ja muotoilijoiden sanakirja, jossa avain on avainsanan nimi, johon muotoilijat ovat sovellettu. Sanakirjan arvo on luettelo muotoilijoista, jotka ovat käytössä. Määritellyn avainsanan muotoilijat korvataan aina. Tyhjä luettelo poistaa kaikki muotoilijat avainsanasta. Jos ``formatters`` on tyhjä sanakirja, silloin kaikki muotoilijat poistetaan kaikista avainsanoista. |\n | ``scope`` | Määrittää muotoilijan eliniän, mahdolliset arvot ovat Global, Suite ja Test. |\n\n Katso `FormatterTypes` -tyypin dokumentaatiota lisätietoja varten.\n\n On mahdollista määrittää omia muotoilijoita lambda-funktioina.\n\n Esimerkki:\n | `Aseta väitteiden muotoilijat` {\"Hanki teksti\": [\"strip\", \"normaalitilassa välit\"]} # Tämä muuttaa kaikki välit yhdeksi välilyönniksi ja poistaa välilyönnit merkkijonon alusta ja lopusta.\n | `Aseta väitteiden muotoilijat` {\"Hanki otsikko\": [\"sovelletaan odotettuun\",\"lambda x: x.replace(' ', '')\"]} # Tämä poistaa kaikki välit merkkijonosta.\n " }, "check_checkbox": { - "name": "valiste valintaruutu", + "name": "valiste_valintaruutu", "doc": "Tarkistaa valintaruudun tai valitsee valintapainikkeen, jonka löytää ``selector``-valitsimen avulla.\n\n | =Argumentit= | =Kuvaus= |\n | ``selector`` | Valintaruudun valitsin. Katso `Elementtien etsiminen` -osio tarkempien valitsintietojen saamiseksi. |\n | ``force`` | Aseta Trueksi ohittaaksesi Playwrightin [https://playwright.dev/docs/actionability | Toimintakyvyn tarkistukset]. |\n\n Avainsana käyttää tiukkaa tilaa, katso `Elementtien etsiminen` lisätietoja tiukasta tilasta.\n\n Ei tee mitään, jos elementti on jo tarkistettu/valittu.\n\n [https://forum.robotframework.org/t//4235|Kommentti >>]\n " }, "clear_text": { @@ -357,7 +357,7 @@ "doc": "Palauttaa viittauksen Playwrightin [https://playwright.dev/docs/api/class-locator|Locator]-objektiin.\n\n Viittausta voidaan käyttää myöhemmissä valitsimissa.\n\n\n | =Argumentit= | =Kuvaus= |\n | ``valitsin`` | Valitsin, josta on haettava . Katso `Elementtien etsiminen` -osio lisätietoja valitsimista. |\n\n Avainsana käyttää tiukkaa tilaa, katso `Elementtien etsiminen` lisätietoja tiukasta tilasta.\n\n Esimerkki:\n | ${elementti} = `Hae elementti` \\#käyttäjätunnuskenttä\n | ${valinta_arvo} = `Hae ominaisuus` ${elementti} >> vaihtoehtoYksi arvo # Valitsin ratkaistaan sivulta.\n | ${valinta_arvo} = `Hae ominaisuus` ${elementti} >> vaihtoehtoKaksi arvo # Valitsin ratkaistaan uudelleen sivulta.\n\n [https://forum.robotframework.org/t//4269|Kommentti >>]\n " }, "get_element_by": { - "name": "hae_elementti avulla", + "name": "hae_elementti_avulla", "doc": "Mahdollistaa elementtien paikantamisen niiden ominaisuuksien perusteella.\n\n Valintastrategioita voi olla useita Playwright-strategioita, kuten AltText tai Label.\n Katso lisätietoja [https://playwright.dev/docs/locators|Playwright Locators] -sivulta.\n\n | =Argumentit= | =Kuvaus= |\n | ``paikannusstrategia`` | Käytettävä SelectionStrategy. Viittaa Playwrightin ``page.getBy***`` -toimintoihin. Katso https://playwright.dev/docs/locators |\n | ``teksti`` | Teksti, jonka perusteella elementti paikannetaan. |\n | ``tarkka`` | Määrittääkö etsittävän tarkan osuman: isot ja pienet kirjaimet huomioiden koko merkkijono. Oletusarvo on epätosi. Sitä ei huomioida, kun etsitään säännöllisellä lausekkeella. Huomaa, että tarkka osuma poistaa välilyönnit. Tällä ei ole vaikutusta, jos käytetään RegExpia tai jos TestID:a käytetään strategiana. |\n | ``kaikki_elementit`` | Jos tosi, palauttaa kaikki sopivat elementit listana. |\n\n Tämä avainsana toteuttaa seuraavat Playwright-toiminnot:\n - [https://playwright.dev/docs/api/class-page#page-get-by-alt-text|page.getByAltText]\n - [https://playwright.dev/docs/api/class-page#page-get-by-label|page.getByLabel]\n - [https://playwright.dev/docs/api/class-page#page-get-by-placeholder|page.getByPlaceholder]\n - [https://playwright.dev/docs/api/class-page#page-get-by-test-id|page.getByTestId]\n - [https://playwright.dev/docs/api/class-page#page-get-by-text|page.getByText]\n - [https://playwright.dev/docs/api/class-page#page-get-by-title|page.getByTitle]\n\n ``page.getByRole`` tukee `Hae elementti roolin mukaan`-avainsanaa.\n\n Jos elementti on haettava iframe:sta, valitsimen etuliite on määritettävä käyttäen `Aseta valitsimen etuliite`-avainsanaa, joka sisältää ``>>>`` lopetuksena.\n\n [https://forum.robotframework.org/t//5937|Kommentti >>]\n " }, "get_element_by_role": { diff --git a/utest/test_translation.py b/utest/test_translation.py index 50e285c..e3b403c 100644 --- a/utest/test_translation.py +++ b/utest/test_translation.py @@ -53,5 +53,6 @@ def test_keyword_names_are_unique(data: dict): def test_keyword_names_no_space(data: robotframework_browser_translation_fi.Language): - for translation in data: + for translation, value in data.items(): assert " " not in translation, translation + assert " " not in value["name"] From 02b26b3053a53c0c2b0f5479b6f7f23008141b39 Mon Sep 17 00:00:00 2001 From: Tatu Aalto Date: Sat, 6 Apr 2024 01:39:22 +0300 Subject: [PATCH 2/4] fix: keywords should not contains spaces also improve testing --- atest/json_lib.py | 19 +++++++++++++++++++ atest/translation.robot | 16 +++++++++++++--- tasks.py | 2 +- 3 files changed, 33 insertions(+), 4 deletions(-) create mode 100644 atest/json_lib.py diff --git a/atest/json_lib.py b/atest/json_lib.py new file mode 100644 index 0000000..d544b7c --- /dev/null +++ b/atest/json_lib.py @@ -0,0 +1,19 @@ +import json +from pathlib import Path + +from robot.api import logger + + +def compare_translations(file: Path) -> dict: + with Path(__file__).parent.parent.joinpath("robotframework_browser_translation_fi", "translation.json").open("r") as file_object: + expected_data = json.load(file_object) + expected_keywords = [kw["name"]for kw in expected_data.values()] + logger.info(expected_keywords) + with file.open("r") as file_object: + data = json.load(file_object) + keywords = data["keywords"] + for keyword in keywords: + logger.info(keyword) + name = keyword["name"] + name = name.replace(" ", "_").lower() + assert name in expected_keywords, f"name '{name}' not in {expected_keywords}" diff --git a/atest/translation.robot b/atest/translation.robot index b496573..e63a8cf 100644 --- a/atest/translation.robot +++ b/atest/translation.robot @@ -1,6 +1,16 @@ *** Settings *** -Library Browser +Library Browser language=FI +Library Process +Library OperatingSystem +Library json_lib.py *** Test Cases *** -Translation 1 - Pass Execution This is example +Translation Works With Translation + Uusi Sivu https://github.com/MarketSquare/robotframework-browser-translation-fi + +LibDoc Works With Translation + [Setup] Remove File ${CURDIR}/Browser.json + ${json_kw_speck} = Join Path ${CURDIR} Browser.json + ${cmd} = Join Command Line python -m robot.libdoc --format=json Browser::language=FI ${json_kw_speck} + Run Process ${cmd} shell=True + Compare Translations ${json_kw_speck} diff --git a/tasks.py b/tasks.py index 7109be2..73ba57e 100644 --- a/tasks.py +++ b/tasks.py @@ -43,7 +43,7 @@ def utest(ctx): @task def atest(ctx): - ctx.run("robot -L debug --outputdir atest/output atest") + ctx.run("python -m robot -L debug --outputdir atest/output atest") @task From 06aa7b9be040862cbb0345c21e0f18e18ad188c0 Mon Sep 17 00:00:00 2001 From: Tatu Aalto Date: Sat, 6 Apr 2024 01:55:31 +0300 Subject: [PATCH 3/4] chore: lint fixes --- atest/json_lib.py | 10 ++++++---- atest/translation.robot | 12 +++++++++--- pyproject.toml | 9 ++++++--- utest/test_translation.py | 2 +- 4 files changed, 22 insertions(+), 11 deletions(-) diff --git a/atest/json_lib.py b/atest/json_lib.py index d544b7c..d2e6966 100644 --- a/atest/json_lib.py +++ b/atest/json_lib.py @@ -4,11 +4,13 @@ from robot.api import logger -def compare_translations(file: Path) -> dict: - with Path(__file__).parent.parent.joinpath("robotframework_browser_translation_fi", "translation.json").open("r") as file_object: +def compare_translations(file: Path): + with Path(__file__).parent.parent.joinpath( + "robotframework_browser_translation_fi", "translation.json" + ).open("r") as file_object: expected_data = json.load(file_object) - expected_keywords = [kw["name"]for kw in expected_data.values()] - logger.info(expected_keywords) + expected_keywords = [kw["name"] for kw in expected_data.values()] + logger.info(f"expected_keywords: {expected_keywords}") with file.open("r") as file_object: data = json.load(file_object) keywords = data["keywords"] diff --git a/atest/translation.robot b/atest/translation.robot index e63a8cf..1e2905c 100644 --- a/atest/translation.robot +++ b/atest/translation.robot @@ -1,8 +1,8 @@ *** Settings *** Library Browser language=FI Library Process -Library OperatingSystem -Library json_lib.py +Library OperatingSystem +Library json_lib.py *** Test Cases *** Translation Works With Translation @@ -11,6 +11,12 @@ Translation Works With Translation LibDoc Works With Translation [Setup] Remove File ${CURDIR}/Browser.json ${json_kw_speck} = Join Path ${CURDIR} Browser.json - ${cmd} = Join Command Line python -m robot.libdoc --format=json Browser::language=FI ${json_kw_speck} + ${cmd} = Join Command Line + ... python + ... -m + ... robot.libdoc + ... --format=json + ... Browser::language=FI + ... ${json_kw_speck} Run Process ${cmd} shell=True Compare Translations ${json_kw_speck} diff --git a/pyproject.toml b/pyproject.toml index 558780c..14b7a65 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -70,9 +70,6 @@ exclude = ''' lint.unfixable = [] exclude = [ "__pycache__", - "generated", - "wrapper", - "browser.pyi", ] target-version = "py38" lint.select = [ @@ -106,6 +103,7 @@ lint.select = [ [tool.ruff.lint.per-file-ignores] "tasks.py" = ["T201"] "utest/*" = ["INP001"] +"atest/*" = ["INP001"] [tool.pytest.ini_options] testpaths = ["utest"] @@ -121,3 +119,8 @@ configure = [ "RenameTestCases:enabled=True:capitalize_each_word=True", "RenameKeywords:enabled=True", ] + +[tool.mypy] +exclude = [ + "utest/*", +] diff --git a/utest/test_translation.py b/utest/test_translation.py index e3b403c..3475c33 100644 --- a/utest/test_translation.py +++ b/utest/test_translation.py @@ -55,4 +55,4 @@ def test_keyword_names_are_unique(data: dict): def test_keyword_names_no_space(data: robotframework_browser_translation_fi.Language): for translation, value in data.items(): assert " " not in translation, translation - assert " " not in value["name"] + assert " " not in value["name"], value From f10b9b95c5c978060d7c4f72dc0c718db440c7ef Mon Sep 17 00:00:00 2001 From: Tatu Aalto Date: Sat, 6 Apr 2024 01:58:19 +0300 Subject: [PATCH 4/4] chore: run rfbrowser init chromium in ci --- .github/workflows/on-push.yml | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/.github/workflows/on-push.yml b/.github/workflows/on-push.yml index 4c7205a..5143399 100644 --- a/.github/workflows/on-push.yml +++ b/.github/workflows/on-push.yml @@ -27,7 +27,9 @@ jobs: - name: Run unit tests run: inv utest - name: Run acceptance tests - run: inv atest + run: | + rfbrowser init chromium + inv atest - uses: actions/upload-artifact@v4 if: ${{ always() }} with: