Использование инспектора DOM для поиска идентификатора кнопки - PullRequest
2 голосов
/ 11 марта 2012

Я пытаюсь использовать инспектор DOM, чтобы найти идентификатор кнопки «Еще» в нижней части этой страницы , которая показывает больше результатов.

Я пытаюсьсделайте что-то вроде этого примера:

require 'watir-webdriver'

b = Watir::Browser.new
b.goto 'svpply.com/editors_pick'

#count products
puts b.elements(:xpath => '//li[@data-class="Product"]').count
#=> 30

#Now click button
show_all = b.button(:id => "btn_all")
show_all.click
sleep 4

#count products again
puts b.elements(:xpath => '//li[@data-class="Product"]').count
#=>60

Однако мне неясно, как искать этот конкретный идентификатор в структуре DOM.Может ли кто-нибудь также объяснить разницу между атрибутом, элементом, идентификатором и узлом?

Ответы [ 2 ]

2 голосов
/ 12 марта 2012

Чтобы использовать DOM Inspector для кнопки «Дополнительно»:

  1. Откройте DOM Inspector (Ctrl + Shift + I)
  2. Нажмите кнопку [More], которую вы хотите проверить
  3. В правой части панели Инспектора DOM нажмите кнопку [HTML]
  4. Это должно отобразить HTML-код страницы, который будет содержать подробности элемента управления [More].Вы заметите, что элемент на самом деле DIV, а не кнопка.А также, что идентификатор находится в форме "_more".

-> Это должно показать HTML-код страницы, который покажет детали элемента управления [More].Вы заметите, что элемент на самом деле DIV, а не кнопка.А также, что идентификатор имеет вид "_more".

Итак, чтобы сделать ваш пример со страницей Quora, вы должны сделать что-то вроде:

require 'watir-webdriver'

class QuoraPage
    def initialize(browser)
        @browser = browser
    end

    def goto()
        @browser.goto 'http://www.quora.com/Startups/best_questions'
        wait_questions_loaded
    end

    def click_more()
        @browser.div(:id, /_more/).click
        wait_questions_loaded
    end

    def questions_count()
        @browser.links(:class, 'question_link').count{ |x| x.visible? }
    end

    def wait_questions_loaded()
        begin
            questions_start_count = questions_count()
            sleep(2)
        end while questions_start_count != questions_count()
    end 
end

page = QuoraPage.new(Watir::Browser.new :chrome)
page.goto
puts page.questions_count
page.click_more
puts page.questions_count

Обратите внимание, что мне пришлось поставитьиначе спит вебдрайвер, как анонимный гусь.Я пробовал разные wait_untils, но мне не удалось найти что-то, что работало (кроме сна, который не очень надежен).

Относительно вашего вопроса об узлах, элементах и ​​т. Д. Я думаю, что вам лучше посмотреть1020 *http://www.w3schools.com/dom/default.asp.

1 голос
/ 12 марта 2012

Чтобы нажать кнопку на svpply, вы можете просто использовать

b.button(:text => "Show All").click

Подсчет всех продуктов, отображаемых на странице, потенциально можно выполнить с помощью

b.lis(:class => "grab large").count

Это все длясайт svpply.Я вообще не могу заставить квору автоматизировать, она просто останавливает мой watir-webdriver на неопределенное время.

Вы также захотите подождать, пока watir не подсчитает продукты.Это можно сделать с помощью:

b.wait_until{b.lis(:class => "grab large").count > 30}
...