Selenium webdriver ruby​​ assertTextPresent

时间:2015-12-31 09:34:35

标签: ruby selenium webdriver assert

我写了以下代码:

require 'selenium-webdriver'

driver = Selenium::WebDriver.for(:firefox)

driver.navigate.to("http://www.yahoo.co.uk")

assert(@driver.find_element(:tag_name => "body").text.include?("News"))

driver.find_element(:link_text, "News").click

driver.quit

但是低于错误:

C:/RubyTito/FirstRuby/RSpec.rb:4:in `<main>': undefined method `find_element' for nil:NilClass (NoMethodError)

脚本打开ff但在第4行停止。我想要实现的是脚本应该打开ff找到新闻链接(给出一些消息为TRUE),然后点击新闻链接。

1 个答案:

答案 0 :(得分:0)

@driver未在您的代码中确定

<强>顺便说一句:
@driver是一个实例变量 - 可供类中的所有方法使用。

driver是一个局部变量。它们只存在于其范围内(当前块)

more information

解决方案#1:

require 'selenium-webdriver'

driver = Selenium::WebDriver.for(:firefox)
driver.navigate.to("http://www.yahoo.co.uk")

if driver.find_element(:tag_name => "body").text.include?("News") # true or false
  puts "News link present on page"
  driver.find_element(:link_text, "News").click
else
  puts "News not found"
end

driver.quit

解决方案#2 :(以rspec运行this_file.rb)

require "selenium-webdriver"
require "rspec"

describe "Yahoo Search" do

  before(:each) do
    @driver = Selenium::WebDriver.for :firefox
    @base_url = "http://www.yahoo.co.uk"
    @accept_next_alert = true
    @driver.manage.timeouts.implicit_wait = 30
  end

  after(:each) do
    @driver.quit   
  end

  it "click on News link" do
    @driver.get(@base_url + "/")
    @driver.find_element(:tag_name => "body").text.include?("News")
    @driver.find_element(:link_text, "News").click
  end

end

您也可以使用watir-webdriver