Ruby 从没有';没有不同的URL

Ruby 从没有';没有不同的URL,ruby,regex,automation,watir,hpricot,Ruby,Regex,Automation,Watir,Hpricot,我正在尝试使用自动搜索替代电话号码的过程。每次搜索备用号码或名称时,都会出现'/companysearch.php'页面 很明显,这个页面没有参考资料,在我看来,你不能只是链接到这个页面 我希望使用下面的代码,自动打开浏览器,搜索姓名/号码,剥离HTML,然后提供前5个结果。我已经关闭了自动化部分,但很明显,当尝试使用Hpricot保存网页时,它只会显示“抱歉找不到任何内容”页面,因为我无法直接链接到搜索结果页面 以下是我迄今为止的代码: (我删除了注释以缩短它) 需要“rubygems” 需要

我正在尝试使用自动搜索替代电话号码的过程。每次搜索备用号码或名称时,都会出现
'/companysearch.php'
页面

很明显,这个页面没有参考资料,在我看来,你不能只是链接到这个页面

我希望使用下面的代码,自动打开浏览器,搜索姓名/号码,剥离HTML,然后提供前5个结果。我已经关闭了自动化部分,但很明显,当尝试使用Hpricot保存网页时,它只会显示“抱歉找不到任何内容”页面,因为我无法直接链接到搜索结果页面

以下是我迄今为止的代码: (我删除了注释以缩短它)

需要“rubygems”
需要“watir”
需要“hpricot”
需要“打开uri”
OH870类
def searchName(名称)
browser=Watir::browser.new
browser.goto'http://www.saynoto0870.com/search.php'
browser.text_字段(:name=>search_name')。设置名称
browser.button(:name=>“提交”)。单击
结束
def搜索编号(编号)
browser=Watir::browser.new
browser.goto'http://www.saynoto0870.com/search.php'
browser.text_字段(:name=>number')。设置编号
browser.button(:name=>“提交”)。单击
结束
def loadNew(网站)
doc=Hpricot(开放式(网站))
看跌期权(doc)
结束
def带标签
stripped=website.gsub(%r{]+?>},“”)
脱光衣服
结束
下课
主级
现在我不确定是否有一种方法可以“让watir访问companysearch.php页面并转储结果,而不必将此页面作为变量传递”


我想知道这里是否有人有什么建议?

有了WATIR,除去多余的库,以下是完成您描述的内容所需的全部(仅使用“名称”测试用例)。我已经将其从函数格式中拉出,因为您已经知道如何做,这将是一个更清晰的测试用例路径

require 'watir'

@browser = Watir::Browser.new :firefox   #open a browser called @browser

@browser.goto "http://(your search page here)"         #go to the search page
@browser.text_field(:name => 'name').value = "Awesome" #fill in the 'name' field
@browser.button(:name => 'submit').click               #submit the form
如果一切顺利,我们现在应该查看搜索结果。WATIR已经知道它在一个新页面上-我们不必指定URL。如果结果在一个框架中,我们确实需要访问该框架,然后才能查看其内容。让我们假设它们位于ID为“search_results”的DIV元素中:

如您所见,无需保存整个页面即可解析结果。它们可以位于表格单元格中,也可以位于每行不同的div中,或者位于新的帧中。所有这些都可以通过WATIR轻松访问,存储在变量、数组中,或者立即写入控制台或日志文件

@results = Array.new                #create an Array to store our results

@browser.divs.each do |div|         #for each div element on the page
   if div.id == "search_results"    #if the div ID equals "search_results"
      @results << div.text          #add it to our array named @results
   end
end
我还建议您研究一些编程原则,如DRY(不要重复您自己)。在您的函数定义中,您可以看到它们共享代码,例如打开浏览器并访问相同的URL,您可以合并这些原则:

def search(how, what)
  @browser = Watir::Browser.new :firefox
  @browser.goto "(that search url again)"
  @browser.text_field(:name => how).value = what
  etc...
end

search("name", "Hilton")
search("number", "555555")

因为我们知道两个可用的文本字段名是“name”和“number”,而这些作为“如何”具有良好的逻辑意义,我们可以对它们进行参数化,并为按名称搜索和按编号搜索测试用例使用单个函数。只要测试用例保持足够的相似性以供共享,这将更加有效。

首先,使用WATIR时,hpricot和openuri是多余的。WATIR已经与DOM元素交互/访问DOM元素。你也能写出你的测试用例吗?从我第一次读到这听起来像是一个非常简单的WATIR应用程序,但我不确定我是否完全理解你想做什么。我也是。我不确定Josh在做什么。我恐怕我还没有达到测试用例的程度,只有让代码运行才能测试它!对你来说,最容易理解的方法就是去sayNoTo0870网站,尝试一个有总机的地方的名字,比如说希尔顿,看看我看到了什么。我只是尝试在每次搜索后剥离显示的内容,并将其显示在控制台/终端中。说实话,我是个糟糕的程序员,我想通过问很多问题来学习!Josh,你的测试用例只是告诉你/我们你期望看到什么。“当我到达X页面并搜索Y时,我应该会看到(某些东西)”。你有一个,但你可能认为它不会那么简单;)。根据最初的问题,我很难理解“某物”,但我想我在下面得到了它。不确定你自动搜索的目的是什么,但我真的希望你注意主页底部的这段文字——复制本网站内的任何内容都需要书面许可。--显然,我并不像我最初想的那样解释问题!乔希,如果这对你有效,请点击这个答案旁边的“接受”——谢谢!如果您必须在页面中搜索具有相同ID的多个div,那么该站点上的代码就有很大问题,因为根据HTML标准,ID值在页面中应该是唯一的。现在,如果是名称或类,那么是的,我可以看到必须使用这种方法来查找结果行。恰克,这一点很好,但我认为我在这里看到的大多数提问者的示例代码都不符合W3C标准。。。所以我只是给了他们一个熟悉的例子!
@results = Array.new                #create an Array to store our results

@browser.divs.each do |div|         #for each div element on the page
   if div.id == "search_results"    #if the div ID equals "search_results"
      @results << div.text          #add it to our array named @results
   end
end
@results[0]      #first element
@results[0..4]   #first 5 elements
def search(how, what)
  @browser = Watir::Browser.new :firefox
  @browser.goto "(that search url again)"
  @browser.text_field(:name => how).value = what
  etc...
end

search("name", "Hilton")
search("number", "555555")