使用DOM检查器查找按钮的ID

时间:2012-03-11 04:26:10

标签: ruby dom watir watir-webdriver

我正在尝试使用DOM检查器查找this page底部“更多”按钮的ID,以显示更多结果。

我正在尝试做类似这样的事情:

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结构中搜索特定的id。有人还可以解释属性,元素,ID和节点之间的区别吗?

2 个答案:

答案 0 :(得分:2)

使用DOM Inspector进行更多按钮:

  1. 打开DOM Inspector(Ctrl + Shift + I)
  2. 单击要检查的[更多]按钮
  3. 在DOM检查器栏的右侧,单击[HTML]按钮
  4. 这应显示页面的HTML,其中包含[More]控件的详细信息。您会注意到该元素实际上是DIV而不是按钮。同样,ID的格式为“_more”。
  5. - >这应该显示页面的HTML,它将显示[更多]控件的详细信息。您会注意到该元素实际上是DIV而不是按钮。同样,ID的格式为“_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
    

    请注意,我必须把睡眠放在其他webdriver挂起,就像anonygoose提到的那样。我尝试了不同的wait_untils,但没有设法找到有用的东西(除了睡眠不是很强大)。

    关于节点,元素等问题。我认为您最好查看http://www.w3schools.com/dom/default.asp

答案 1 :(得分:1)

要按下svpply上的按钮,您只需使用

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

可以使用

计算页面上显示的所有产品
b.lis(:class => "grab large").count

这是svpply网站的全部内容。我根本无法让quora自动化,它只是无限期地停止了我的watir-webdriver。

您还需要等待才能计算产品。这可以通过以下方式完成:

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