2014-12-24 2 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

Я думаю, проблема заключается в том, что вы используете expect, когда вы должны просто иметь условное значение @driver.find_element(:xpath, "//*[@href='/gallery/']").displayed?. Если условие равно true, вы увидите ожидаемое сообщение; Аналогично, если он оценивает значение false, вы увидите элемент `` NOT NOT.

Как в настоящее время построено, если метод 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 
Смежные вопросы