Archiwum kategorii: Ruby

How to check if element is invisible in Ruby Selenium client

How to check if element is invisible in Ruby Selenium client? In Java or C# answer is easy. There is a mechanism called ExpectedCondition, which has got ready for use method: ExpectedConditions.invisibilityOfElementLocated. Example:

driverWait.until(ExpectedConditions.invisibilityOfElementLocated(element));

Unfortunatelly, Ruby client hasn’t got anything like this. Quick workaround – try to find element. When element is not displayed, catch exception and return false:

def check_if_not_exist(locator)
  begin
    wait = Selenium::WebDriver::Wait.new :timeout => 10
    wait.until { @driver.find_element(:name, 'elementName').displayed? }
  rescue
    false
  end
end

Not very elegant and quick, but works.

 

Jak szybko nauczyć się programować w Ruby?

Ruby to świetny język, zarówno jako pomocniczy język (skryptowy), jak i do nauki programowania od podstaw – choć tu jednak jestem tradycjonalistką i na początek polecam raczej języki o składni podobnej do C, czyli C/C++, C#, Java, ewentualnie… JavaScript, choć to mocno kontrowersyjne;)

Wracając jednak do Ruby – znalazłam w sieci kilka interaktywnych tutoriali. Chyba najładniejszy to: http://tryruby.org/levels/1/challenges/0. Wygląda jak książka o Kubusiu Puchatku 🙂 Jest dość krótki, przechodzi się go raz dwa.

Try Ruby

Mniej uroczym, ale również interaktywnym tutorialem jest https://www.codecademy.com/learn/ruby.

Code Academy

Code Academy poza kursem Ruby oferuje także mnóstwo innych kursów dotyczących technologii webowych, np. SQL, HTML, Rails itd. Nic tylko się uczyć:)

 

Warty sprawdzenia jest także https://rubymonk.com/.

Ruby Monk

 

 

OptParse

Do obsługi parametrów wejściowych do skryptu w Ruby jest biblioteka OptParse . Aby jej użyć, wystarczy dołączyć ja poprzez: require 'optparse'. Nie jest ona jednak idealna – brak jej sensownej obsługi parametrów wymaganych/opcjonalnych, dodatkowo czasem kod nadmiernie rozrasta się. Plusem jest obecna dokumentacja wraz z przykładami i brak konieczności instalacji.

Logika wyrażeń w instrukcjach warunkowych

Logika matematyczna to jedna z bardziej przydatnych w programowaniu (i ogólnie informatyce) dziedzin matematyki. Dzięki prawom logiki działają wszystkie układy elektroniczne. W codzienności programisty może przydać się zwłaszcza podczas optymalizacji warunków logicznych.

Przykładowo, inspekcja kodu Ruby w środowisko IntelliJ za błąd uważa sterowanie przepływem za pomocą negatywnego warunku typu: if !condition ... . Taki pojedynczy warunek wystarczy w takim przypadku zamienić na: unless condition .... W przypadku bardziej rozbudowanych warunków przydają się znane z liceum prawa de Morgana.

I prawo de Morgana (zaprzeczenia koniunkcji)
~(p ^ q) <==> (~p v ~q)

Poniższy kod sprawdza, czy jest widoczny nagłówek. Nagłówek powinien mieć tytuł oraz podtytuł. Jeżeli obydwa tytuły są widoczne, uznajemy ze jest wyświetlony poprawnie. I tak następujące instrukcje warunkowe:

if !is_title_displayed || !is_subtitle_displayed
  puts 'Header not visible!'
end

można zamienić na:

unless (is_title_displayed && is_subtitle_displayed)
  puts 'Header not visible!'
end

Zobaczmy, jak to działa.

def check(p, q)
  if !p || !q
    puts 'Header not visible!'
  else
    puts 'Header is displayed.'
  end
end

def check_morgan(p, q)
  unless p && q
    puts 'Header not visible!'
  else
    puts 'Header is displayed.'
  end
end

Czytaj dalej

[Ruby] concat czy concat!?

Funkcji concat chyba nikomu nie trzeba przedstawiać – służy co łączenia stringów. W Ruby działa identycznie jak jej odpowiednik w Javie – do stringa, na którym została wywołana, dokleja wartość argumentu.

a1 = "Ola"
Wynikiem przypisania jest: „Ola”

a1.concat("Makota")
Zmienna a1 zawiera teraz cały ciąg: „OlaMakota”.

Nasuwa się więc pytanie, czy zgodnie z konwencją przyjętą w Ruby, funkcja ta nie powinna nazywać się "concat!"? Konwencja ta mówi, że funkcje dokonujące „drastycznych” modyfikacji obiektu powinny zawierać wykrzyknik.

Przykładowo:
a1="DoloresRyba"
a1.upcase

Funkcja zwraca: „DOLORESRYBA”, natomiast wartość obiektu a1 to nadal „DoloresRyba”.

a1.upcase!
Funkcja zwraca: „DOLORESRYBA”, wartość obiektu a1 została również zmodyfikowana – wartością a1 jest również „DOLORESRYBA”.

Ruby: hash as argument

What will Ruby do, when we pass hash as argument to function? Let’s see.

We have method – with definied default value (empty hash):

def foo(hashh = {})
  puts 'Is hash empty? ' + hashh.empty?.to_s,""
end

1. When we invoke function with any hash, it will be passed into method. Output? „Is hash empty? false„.

foo({:id => 'someid'})

h = {:id => 'first', :name => 'noname'}
foo(h)

2. When we invoke function without any parameter, Ruby will take default value – empty hash. Output is „Is hash empty? true„.

foo

3. Of course, when we pass nil to function, we will got exception: „undefinied method ’empty’ for nil:NilClass„.

foo(nil)