2014-12-24 107 views
0

下面的代碼檢查是否顯示的元素,如果該元素是目前運行的具體行動,否則測試繼續正常進行:如何測試一個元素是否顯示在頁面上

require "selenium-webdriver" 
require "rspec" 
require 'rspec/expectations' 


describe "Current Expense" do 


    before(:all) do 
    @driver = Selenium::WebDriver.for :firefox 
    @base_url = "http://the-internet.herokuapp.com/disappearing_elements" 
    @driver.manage.window.maximize 
    end 

    after(:all) do 
    @driver.quit 
    end 


    it "Check icon" do 
    @driver.get(@base_url) 
    if expect(@driver.find_element(:xpath, "//*[@href='/gallery/']").displayed?).to be_truthy 
     @driver.find_element(:xpath, "//*[@href='/gallery/']").click 
     sleep 2 
     puts "element appears" 
    else 
     puts "element NOT appears" 
    end 
    end 
end 

當元素出現該消息,但是當元素不存在於頁面中時,會發生錯誤,並且不執行else塊。什麼導致了這個錯誤?

+0

請將您看到的異常添加到您的問題中。謝謝。 – aceofbassgreg

回答

1

我認爲問題在於,您應該只使用條件@driver.find_element(:xpath, "//*[@href='/gallery/']").displayed?時使用expect。如果條件爲true,您將看到預期的消息;同樣,如果它的計算結果爲false,您將看到「」元素不出現「。

按照目前的構建,如果find_element方法返回false那麼規範應該失敗。請發佈您看到的錯誤或異常,以便我們可以確定地知道。

在附註中,您現在所擁有的對於頁面是否正常工作的快速和骯髒測試很好,但您可能希望在測試文件中給出兩種情況:一種是您知道該圖標將出現在頁面上,並且該圖標不應該出現在頁面上,然後測試每個圖標的結果。例如:

#Code omitted 
it "has the icon when x is the case" do 
    # make x be the case 
    @driver.get(@base_url) 
    @driver.find_element(:xpath, "//*[@href='/gallery/']").displayed? 
    @driver.find_element(:xpath, "//*[@href='/gallery/']").click 
    sleep 2 
    # code that verifies that the element is on the page 
end 

it "doesn't have the icon when y is the case" do 
    # make y be the case 
    @driver.get(@base_url) 
    expect { 
    @driver.find_element(:xpath, "//*[@href='/gallery/']").displayed? 
    }.to be_false 
end 
#code omitted 
0

expect是用於測試失敗的原因。找到下面的代碼解決方案..乾杯!

it "has the icon when x is the case" do 
    @driver.get(@base_url) 
    begin 
    @driver.find_element(:xpath, "//*[@href='/gallery/']") 
    @driver.find_element(:xpath, "//*[@href='/gallery/']").click 
    rescue Selenium::WebDriver::Error::NoSuchElementError 
    raise 'The Element ' + what + ' is not available' 
    end 
end 

it "doesn't have the icon when y is the case" do 
    @driver.get(@base_url) 
    begin 
    @driver.find_element(:xpath, "//*[@href='/gallery/']") 
    raise 'The Element ' + what + ' is available' 
    rescue Selenium::WebDriver::Error::NoSuchElementError 
    expect(true).to be_truthy 
    end 
end 
相關問題