You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
As you can see from this example, the Ubuntu operating system provides many ways to control the start and stop of services and programs. In startup scripts, you can describe dependencies on other services using "Required-Start/Required-Stop" sections, and the script itself can be of any complexity, allowing you to fine-tune any startup configuration.
165
165
166
-
> This material was written for the "First contest of Russian-language articles for Ubuntu OS 2011" (konkurs.ubuntu.ru) and published on [open-life.org](https://open-life.org/blog/1862.html)
167
-
{: .prompt-tip }
168
-
169
166

170
167
_Article competition diploma._
168
+
169
+
> This material was written for the "First contest of Russian-language articles for Ubuntu OS 2011" (konkurs.ubuntu.ru) and published on [open-life.org](https://open-life.org/blog/1862.html)
Copy file name to clipboardExpand all lines: _posts/2021/2021-06-14-test-framework-for-microsoft-office-add-in.md
+5-1
Original file line number
Diff line number
Diff line change
@@ -29,7 +29,7 @@ Build a test framework that can:
29
29
- Support simultaneous work with multiple instances of Office applications
30
30
31
31
## Solution
32
-
The test framework is built using [Selenium](https://www.selenium.dev/) for web application part and [FlaUI](https://github.com/FlaUI/FlaUI) for UI automation of Microsoft Office applications. I chose FlaUI because it supports UIA3 automation, which works best for WPF applications.
32
+
The test framework is built using Selenium for web application part and FlaUI for UI automation of Microsoft Office applications. I chose FlaUI because it supports UIA3 automation, which works best for WPF applications.
33
33
34
34
The solution includes the following projects:
35
35
-`Office`, which is responsible for launching applications and creating documents such as read-only and protected documents.
@@ -255,3 +255,7 @@ public abstract class DocumentBase: IDocument
255
255
256
256
## Conclusion
257
257
While the solution worked, it was not without its drawbacks. Due to the nature of desktop automation, it was not possible to run tests in parallel mode on the same machine/session, or to run tests in headless mode. Each CI agent required additional configuration to run these tests. In addition, these tests were quite slow because it takes time to run a process as heavy as an MS Office application. Therefore, we had to keep an eye on the scenarios we were automating to maintain a small test suite. The focus was on other testing solutions, while scenarios that needed to run in the Microsoft Office environment had to be written using this framework.
Copy file name to clipboardExpand all lines: _posts/2021/2021-09-30-measure-application-startup-performance.md
+4-1
Original file line number
Diff line number
Diff line change
@@ -31,7 +31,7 @@ There are solutions for measuring application performance, such as integrated or
31
31
I had to accept the fact that I needed a custom solution. During my research, I found an interesting example of an application that aims to test the startup performance of desktop applications by launching the application and detecting the point at which the application becomes visible and waits for idle input.
This was pretty close to what I was looking for, so I decided this was a good starting point for my idea. However, I had to work around its limitations: it won't work for complex applications and it can't be extended to add additional features.
37
37
@@ -209,3 +209,6 @@ To perform tests, this solution requires a Windows server running as a CI agent
209
209
210
210
* Unsuitable for all cases
211
211
The solution is designed based on analysis of target applications and may not work for other applications. It's completely up to the application implementation, and plug-in initialization can be fully parallel or delayed until the main process is fully loaded, so you won't affect startup performance in any way.
Copy file name to clipboardExpand all lines: _posts/2021/2021-10-15-choosing-a-selector-strategy.md
+7-3
Original file line number
Diff line number
Diff line change
@@ -15,7 +15,7 @@ image: cover.webp
15
15
What is a selector? In terms of web automation testing, a selector refers to the mechanism or technique used to locate and identify an element on a web page. Common selector types include ID, Name, Class, XPath, CSS, Link text etc.
@@ -42,6 +42,10 @@ Let me take a step back from the technical details of locators and focus more on
42
42
The selectors I mentioned earlier, which we use to find elements on a page, were designed primarily for development, not testing. However, as testers, we should focus more on how real users perceive and interact with the UI than on the technical details of the implementation. Our locators and tests should be able to catch any changes in the UI that break the expected user flow and experience, not just technical bugs. The goal is to ensure that the UI works as intended for the end user, not to validate the code.
43
43
44
44
## Solution
45
-
There are frameworks that support a different approach to writing UI tests. They are built from the ground up for testing and focus more on user interaction, such as the [Testing Library](https://testing-library.com/docs/queries/about/#priority) and [Playwright](https://playwright.dev/docs/locators). They suggest using specific functions like `getByRole()`, `getByText()`, etc. that mimic how real users perceive the elements, reflecting the experience of visual/mouse users as well as those using assistive technology like screen readers. I think this is a great step towards a way that is closer to how software is used by end users, while making selectors resilient to change.
45
+
There are frameworks that support a different approach to writing UI tests. They are built from the ground up for testing and focus more on user interaction, such as the Testing Library and Playwright. They suggest using specific functions like `getByRole()`, `getByText()`, etc. that mimic how real users perceive the elements, reflecting the experience of visual/mouse users as well as those using assistive technology like screen readers. I think this is a great step towards a way that is closer to how software is used by end users, while making selectors resilient to change.
46
46
47
-
Here is an example of how this could be done using Testing Library query: `getByRole('button', { name: 'Submit' })`.
47
+
Here is an example of how this could be done using Testing Library query: `getByRole('button', { name: 'Submit' })`.
Copy file name to clipboardExpand all lines: _posts/2021/2021-11-10-spa-web-application-for-small-businesses.md
+5-3
Original file line number
Diff line number
Diff line change
@@ -16,7 +16,7 @@ This was my longest project so far, which started somewhere in 2008 and ended in
16
16
17
17
The very first version I built in 2008 was a desktop application using C# and WinForms with a simple Microsoft Access database. It had a single screen to add income/expenses and calculate the total, average per year, or per selected range. It was easy to build and super usable for my dad.
18
18
19
-
Later, in 2015, I updated the application to use WPF for modern UI and SQLite database. This version had more features like employee directory, salary management and basic charts. It was also packaged using InnoSetup to create a simple Windows installer. This served him well for many years. It is available on [GitHub](https://github.com/kungfux/business-accounting-desktop).
19
+
Later, in 2015, I updated the application to use WPF for modern UI and SQLite database. This version had more features like employee directory, salary management and basic charts. It was also packaged using InnoSetup to create a simple Windows installer. This served him well for many years.
20
20
21
21
In 2021, he told me that what he wanted most was to be able to access the application from any device, not just his computer.
22
22
@@ -30,8 +30,6 @@ In 2021, he told me that what he wanted most was to be able to access the applic
30
30
- Preserve functionality currently available in the desktop application
31
31
32
32
## Solution
33
-
Source code is available on [GitHub](https://github.com/kungfux/business-accounting-cloud)
34
-
35
33
At first I thought about separate desktop and mobile applications and how to synchronize data between them. However, I decided to simplify things and go with an SPA application that could run in the browser on any device.
- The frontend application bundle was quite large for such a small application. I wish I had spent time thinking about how to break it up into multiple pieces so that the user doesn't have to load the whole bundle if they don't need it.
151
149
- I wish I had taken the time to make it a PWA application so my dad could keep track of his finances even when he is not connected to the Internet.
152
150
- Even after all these years and multiple versions of the application, my dad said he loved the very first version of the program because it allowed him to enter values with a single click and gave him the big picture for the entire year on the same application screen. It was an interesting thing to think about. However, he enjoyed being able to access his finances from anywhere and on any device.
We need to find the screen location of items to interact with. There are some rules were given like game character enjoys only yellow fruits, so user had to click on yellow fruits on screen.
30
30
@@ -88,4 +88,8 @@ Even though it was a simple game, this approach allowed me to automate repetitiv
88
88
89
89
- Image recognition is relatively slow. The image recognition area should be as small as possible to avoid wasting processing time during execution. Each asset should be as small as possible for the same reason. Assets should be sorted and used in order from most expected to least expected. This improves the average execution time.
90
90
- No error thrown on failed click or misclick.
91
-
- Assets are sensitive to any visual changes. Light/dark themes, UI updates can break image search. So you may need to prepare assets for both or have strict requirements for the automation execution environment. Hence, it will work poorly with animated elements and may fail due to element visual state changes such as hover, active, etc.
91
+
- Assets are sensitive to any visual changes. Light/dark themes, UI updates can break image search. So you may need to prepare assets for both or have strict requirements for the automation execution environment. Hence, it will work poorly with animated elements and may fail due to element visual state changes such as hover, active, etc.
Copy file name to clipboardExpand all lines: _posts/2023/2023-09-20-browser-extension-to-add-what-is-missing.md
+7-7
Original file line number
Diff line number
Diff line change
@@ -130,15 +130,15 @@ Each browser company maintains its own extension store where extension developer
130
130
- There is good documentation out there for extension developers, which means that companies would love for people to build extensions.
131
131
- Hopefully, I have been able to work around the limitations and imperfections of the test case management web application. While it has been fun, it would be really nice if the management, developers and testers of the original application would think about how their product is being used and make it just a little bit better, I would never have to spend time doing all this. This is a good lesson and reminder for all of us.
132
132
133
-
## Extras
134
-
You can find this project repository on [GitHub](https://github.com/kungfux/qtest-manager-assistant)
Copy file name to clipboardExpand all lines: _posts/2024/2024-05-26-development-containers.md
+12-2
Original file line number
Diff line number
Diff line change
@@ -23,7 +23,7 @@ We deploy and run applications in Docker containers, which gives us many benefit
23
23
24
24
The idea is to use the Docker container as the development environment during the development process. In theory, this helps to completely eliminate some of the problems associated with configuring the development environment.
25
25
26
-
The good news is that development containers are already widely supported by [VS Code](https://code.visualstudio.com/docs/devcontainers/containers), [Rider](https://www.jetbrains.com/help/rider/Connect_to_DevContainer.html), [Visual Studio](https://learn.microsoft.com/en-us/visualstudio/containers/?view=vs-2022)and others, but with limited support mostly. There are platforms that allow you to spin up development containers remotely, such as [GitHub](https://docs.github.com/en/codespaces/setting-up-your-project-for-codespaces/adding-a-dev-container-configuration/introduction-to-dev-containers). This all possible due to the Open Development Container [Specification](https://containers.dev/implementors/spec/).
26
+
The good news is that development containers are already widely supported by Visual Studio, VS Code, Rider, and others, but with limited support mostly. There are platforms that allow you to spin up development containers remotely, such as GitHub. This all possible due to the Open Development Container Specification.
27
27
28
28
### Configuration
29
29
@@ -68,7 +68,7 @@ flowchart LR
68
68
69
69
Devcontainer images are a bit different from typical images. Devcontainer images come with pre-built tools and runtime stack specific to development container image, also they are not designed to be used for hosting applications in production as permissions and OS configuration could be adjusted to make it easier to use. But what makes a huge difference is the Visual Studio Code Server that runs inside the container, which allows you to run formatters and linters, use a predefined list of Visual Studio Code extensions, and even scan the container output and integrate all of this with the IDE running locally. So you are basically using the IDE as a terminal to connect to the remote development environment.
70
70
71
-
There are a number of ready-made development containers [available](https://mcr.microsoft.com/en-us/catalog?search=dev%20container). You can create a [custom one](https://github.com/devcontainers/template-starter) including [custom features](https://github.com/devcontainers/feature-starter) for devcontainers. Features are self-contained units of installation code and development container configurations that can be installed along with the primary image, allowing you to mix .NET and NodeJS in a single devcontainer configuration, for example, or use them to extend your existing `Dockerfile` definition just for development purposes.
71
+
There are a number of ready-made development containers available. You can create a custom one including custom features for devcontainers. Features are self-contained units of installation code and development container configurations that can be installed along with the primary image, allowing you to mix .NET and NodeJS in a single devcontainer configuration, for example, or use them to extend your existing `Dockerfile` definition just for development purposes.
72
72
73
73
## Benefits
74
74
@@ -100,3 +100,13 @@ There is no ideal solution. Like any other, it has some drawbacks.
100
100
## Conclusion
101
101
102
102
Would I recommend using it? Well, it depends. There are no good or bad tools, and this one is no exception. I believe it needs more time to discover and reduce common issues related to it's usage, IDE support and can become a great seamless one-click way to spin up development environment. While it looks feature-rich even today, it is necessary to compare all the pros and cons for a particular project to make a proper decision. Nevertheless, I would recommend everyone to give it a try and integrate it into a smaller project to see how easy development environment management can be.
-[Introduction to dev containers by GitHub](https://docs.github.com/en/codespaces/setting-up-your-project-for-codespaces/adding-a-dev-container-configuration/introduction-to-dev-containers)
0 commit comments