Translate

Friday, March 10, 2023

Selenium doesn't work with Bootstrap 5: Cannot click on button

 



Selenium test code with Bootstrap 5




Bootstrap 5, a powerful CSS framework, brings new challenges. One issue developers face is Selenium test failures due to Bootstrap 5's smooth scrolling feature. In this article, we'll explore this problem and provide solutions.

 Recently, I encountered some unexpected test suite failures while using Bootstrap 5. Upon closer inspection, I noticed that the test cases were randomly failing, particularly when interacting with the save button as it will not submit the form. An intriguing puzzle, isn't it?

To address the perplexing test failures, I embarked on an extensive debugging process and conducted thorough research. Eventually, I uncovered the root cause of the issue: a conflict between Bootstrap 5 and Selenium. Specifically, a particular CSS element was causing the problem.




 scroll-behavior: smooth;




This does not allow Selenium to automatically scroll down and click on the element that is at the bottom of the page, I mean an element that is outside window.



How to fix it?


I found 2 ways to fix this kind of flaky tests. I tested them and they actually works. 😊


1. Disable smooth scrolling from bootstrap.

 Note: if you are using rails it should be in: _bootstrap-custom.scss


 $enable-smooth-scroll: false;

2.  Override bootstrap scroll-behavior.



 html {
    scroll-behavior: auto !important;
}


2.1 if you're using rails, you can actually do this just for the test environment:



 html[data-environment="test"] {
    scroll-behavior: auto !important;
}


and in your haml file you should have something like this:


%html{"data-environment": "#{Rails.env}"}














Thursday, August 4, 2022

List of Ubuntu releases with corresponding Linux kernel version

 


Ubuntu kernel



This is the list of Ubuntu versions with their corresponding Kernel version:

Version / code nameKernel
22.04 Jammy Jellyfish5.15
21.10 Impish Indri5.13
21.04 Hirsute Hippo5.11
20.10 Groovy Gorilla5.8
20.04 Focal Fossa5.4
19.10 Eoan Ermine5.3
19.04 Disco Dingo5
18.10 Cosmic Cuttlefish4.18
18.04 Bionic Beaver4.15
17.10 Artful Aardvark4.13
17.04 Zesty Zapus4.1
16.10 Yakkety Yak4.8
16.04 Xenial Xerus4.4
15.10 Wily Werewolf4.2
15.04 Vivid Vervet3.19
14.10 Utopic Unicorn3.16
14.04 Trusty Tahr3.13
13.10 Saucy Salamander3.11
13.04 Raring Ringtail3.8
12.10 Quantal Quetzal3.5
12.04 Precise Pangolin3.2+
11.10 Oneiric Ocelot3.0
11.04 Natty Narwhal2.6.38
10.10 Maverick Meerkat2.6.35
10.04 Lucid Lynx2.6.32
09.10 Karmic Koala2.6.31
09.04 Jaunty Jackalope2.6.28
08.10 Intrepid Ibex2.6.27
08.04 Hardy Heron2.6.24
07.10 Gutsy Gibbon2.6.22
07.04 Feisty Fawn2.6.20
06.10 Edgy Eft2.6.17
06.06 Dapper Drake2.6.15
05.10 Breezy Badger2.6.12
05.04 Hoary Hedgehog2.6.10
04.10 Warty Warthog2.6.8

Wednesday, May 25, 2022

Mysql Error: Illegal mix of collations

 




Sometimes, when designing queries, we assume that the database and tables inherit the same general settings. Due to this assumption, we run into many different MYSQL errors.

In this post, I will give you some tips to resolve this specific MYSQL error.

Basically, what it means is that you're trying to compare 2 fields with an incompatible collation.


For example,  if you want to run this query:


 SELECT* FROM table_1 WHERE A in (SELECT B FROM table_2)


But keep in mind that column A has utf8_unicode_ci as default collation, and column B has latin1_general_ci as default collation. So, if you run that query, you will get this error: 


 Illegal mix of collations (utf8_unicode_ci,IMPLICIT) and (latin1_general_ci,IMPLICIT)



How can I make it work?

Well, it's very simple. You can use COLLATE to convert a field to  the desired collation.

Example: 

SELECT* FROM table_1 WHERE A in (SELECT B COLLATE utf8_unicode_ci FROM table_2)


Or

 

SELECT* FROM table_1 WHERE A COLLATE latin1_general_ci in (SELECT B FROM table_2)


Both queries will work fine now.



I hope you find it useful. Until the next post!!!






Wednesday, March 23, 2022

Configuring Capistrano to run migrations on multiple servers

 



A few months ago I found myself in a situation where I had to run the migrations on a second server. After some research, I learned that Capistrano only runs migrations on the first server in the :db group, so other servers with :db will be ignored.


I was very surprised!!!

I kept looking into this and finally found the option I was looking for:


This is an example of the config/deploy/production.rb

 server 'sample-web-server1', user: 'deploy', roles: %w{app web db}
 server 'sample-web-server2', user: 'deploy', roles: %w{app web}
server 'sample-web-server3', user: 'deploy', roles: %w{app web db}

Now in your config/deploy.rb file add this option:

 set :migration_servers, -> { release_roles(fetch(:migration_role)) }

Now, you just have to deploy.


As a side note:

According to the capistrano changelogs, this option was introduced from version 1.1.7, so if you have capistrano 1.1.7 onwards, you can safely use it. 

You can also check the capistrano documentation here


Wednesday, March 16, 2022

Useful Mysql Queries

 




There are some situations where your application could crash and sometimes the problem is not really in the source code, but in the database. e.g: you are using wrong collation for a specific table or column or maybe you are using wrong data type etc.

These Mysql statements can help you debug or better understand your current database structure.


Let's begin:


1.  Show all columns for a specific table:



 SHOW COLUMNS FROM users;


output:





and also you can filter by field or type etc.

 SHOW COLUMNS FROM users WHERE field = 'email';



2. Show table details:


 SHOW TABLE STATUS;


output:




and of course you can filter by table name:


 SHOW TABLE STATUS where name = 'users';


Output:




3. Show Mysql variables:


 SHOW variables;



output:



and also you filter by variable name:


 SHOW variables WHERE Variable_name =  'max_allowed_packet';




4. Show Table size:




 SELECT TABLE_NAME AS `users`, ROUND((DATA_LENGTH + INDEX_LENGTH) / 1024 / 1024) AS `Size (MB)` FROM information_schema.TABLES WHERE TABLE_NAME = "users" AND TABLE_SCHEMA = 'my_blog'



Output:





More are coming soon..







Monday, July 8, 2019

Ubuntu: How to install an old Firefox version





If you want to install an old version of Firefox, you just have to follow these steps:

In this case, I had Firefox 4.5.0 and now I want to install Firefox 47.0.1


First, open your terminal


  1. Download firefox 47.0.1

    wget https://ftp.mozilla.org/pub/firefox/releases/47.0.1/linux-x86_64/en-US/firefox-47.0.1.tar.bz2
  2. Unzip Firefox

    tar -xjvf firefox-47.0.1.tar.bz2
  3. We remove the old version

    sudo rm -rf /opt/firefox*
  4. we move the unzip firefox 47.0.1 to the firefox folder

    sudo mv firefox /opt/firefox
  5. create symbolic link

    sudo ln -sf /opt/firefox/firefox /usr/bin/firefox

Wednesday, April 4, 2018

How to edit a commit message









what you need to do is go to your repository  and type this in your command line:



  git commit --amend



Then in your text editor you can put the new commit message.

Good Luck And Happy Hacking!!!