2014-09-02 6 views
2

У меня есть несколько элементов overlay и некоторые элементы, где я должен проверить видимость этого элемента. Возможно ли достичь этого через объект страницы? Мое намерение здесь заключается в том, что у меня есть метод на моей странице, и он должен вернуть видимость true или false. Вот моя страница файлКак проверить видимость с помощью объекта страницы?

class HomePage 
include PageObject 
span(:text1, :text=>'text1') #this has 10+matches on my page 

    def getAvailabilityOf text 
    return send("#{text}.visible?") 
    end  
end 

Это, как я звоню из моего определения шага.

Then(/^I should verify the visibility of "(.*?)" on images$/) do |text| 
    puts on(HomePage).getAvailabilityOf text 
end 

Ниже приведен HTML.

<div class="box col2 review-box featured masonry-brick" style="height: 360px; background-image: url("https://stagingfiles.gamestakers.com/images/204/medium.jpg?1408991647"); background-repeat: no-repeat; position: absolute; top: 0px; left: 0px;"> 
    <a href="/interviews/jeremy-spillmann"> 
     <div class="gradient-fade"> 
      <div class="featured-box">Featured</div> 
       <div class="title"> 
        <span>text1</span> 
        <h2>Jeremy Spillmann</h2> 
       </div> 
     </div> 
    </a> 
</div> 

Ниже приведена ошибка, которую я получаю.

Then I should verify the visibility of "text1" on images 
    undefined method `text1.visible?' for #<HomePage:0x35798b8> (NoMethodE rror) 
    ./features/support/pages/HomePage_page.rb:67:in `getAvailabilityOf' 
    ./features/step_definitions/homepage.rb:45:in `/^I should verify the visib ility of "(.*?)" on images$/' 
    features\RINavigation.feature:6:in `Then I should verify the visibility of "interview" on images' 

Я ожидаю, истинным или ложным, чтобы быть напечатаны на консоли.
Короче я ожидаю страницы объекта способ реализации

@ browser.span. (: Текст => "text1") видно?


Предложите мне работу вокруг

С уважением,
АВИНАШ

+0

@JustinKo Отредактировано в соответствии с рекомендациями. –

ответ

2

Проблема заключается в том, что в строке:

return send("#{text}.visible?") 

страница-объект ищет один метод под названием «text1.visible?», которого не существует. send предназначен для вызова одного метода. Он не оценивает строку - то есть не будет определять, что вы действительно хотите вызвать метод, а затем с возвращенным значением вызывать второй метод.

Вы можете сделать следующее:

def getAvailabilityOf text 
    return send("#{text}_element").visible? 
end 

Обратите внимание, что send("text1") просто возвращает текст элемента диапазона. send("#{text}_element") возвращает элемент объекта страницы, который будет иметь метод visible?.

В зависимости от того, как вы собираетесь использовать этот метод, возможно, вы действительно хотите следующее, которое позволяет искать текст без необходимости создания аксессуаров.

def getAvailabilityOf text 
    return span_element(:text => text).visible? 
end 
+0

Работаю отлично, как мне было нужно –

2

Я заметил что-то тонкое в вашем вопросе.

Вы указали в комментариях в примере коде:

span(:text1, :text=>'text1') #this has 10+matches on my page 

Вы также добавил это требование:

я должен проверить видимость этого элемента (ов)

Ответ Justin - это именно то, что вам нужно сделать для проверки единственного уникального элемента, но когда у вас есть несколько элементов, которые имеют одинаковые атрибуты и текст, локатор вы хотите использовать span_elements, например, так:

def getAvailabilityOf text 
    return span_elements(:text => text)    
end 

Предположительно вы могли бы сделать какие-то проверки на этом

Then /^I should verify the visibility of (.*?) on images$/ do |text| 
    spans = getAvailabilityOf text 
    spans.each do |s| 
     #Your validation code goes here 
    end 
end 

Эта проверка не очень зернистая, как вы точно не знаете, какой диапазон элемент, который вы проверяете, поэтому обязательно учтите это.

+0

Отличное предложение –

Смежные вопросы