簡體   English   中英

(Ruby)在黃瓜測試中不能使用硒命令嗎?

[英](Ruby) Cannot use selenium commands in cucumber tests?

我試圖將對象定義保存在“主頁”文件中,並在需要使用該按鈕/鏈接/圖像/等時簡單地調用這些方法。 但是由於某些原因,selenium命令顯示了NoMethodError 當我在終端的功能文件夾中簡單地運行cucumber命令時,出現以下錯誤:

When I click on Site Management           # features/step_definitions/steps.rb:17
  undefined method `find_element' for nil:NilClass (NoMethodError)
  ./features/lib/pages/home.rb:3:in `siteMgmt'
  ./features/step_definitions/steps.rb:18:in `/^I click on Site Management$/'
  features/test.feature:6:in `When I click on Site Management'

因此,換句話說,它試圖“單擊站點管理”,代碼移至Home類的SiteMgmt方法(太好了!),然后在嘗試運行selenium find_method方法時失敗。 我以為我可能必須在home.rb的頂部添加一個require selenium-webdriver ,但是a)在steps.rb不是這樣,即使我添加了它,也無法正常工作。

這是文件夾結構:

features/
    --test.feature
    lib/
        pages/
            --home.rb
    step_definitions/
        --steps.rb
    support/
        --env.rb

env.rb

require 'selenium-webdriver'

Dir[File.dirname(__FILE__) + "/../lib/pages/*.rb"].each {|file| require file }

Before do |scenario|
  @driver = Selenium::WebDriver.for :chrome
  @url = "URL goes here"
end

After do |scenario|
  @driver.quit
end

測試功能

Feature: Proof of Concept
  Stack overflow help!

  Scenario:
    Given I am logged into the site
    When I click on Site Management
    Then the Site Management page should load

steps.rb

Given(/^I am logged into AMP$/) do
  @driver.get @amp_url
end

When(/^I click on Site Management$/) do
  link = Home.new.siteMgmt
  link.click
end

Then(/^the Site Management page should load$/) do
  # assert here
end

home.rb

class Home
    def siteMgmt
        elem = @driver.find_element(:xpath, '//*[@id="body"]/section[2]/ul/li[1]/h3/a')
        return elem
    end
end

感謝你的幫助!

Before塊中創建的@driver實例變量不適用於實例化的Home對象。 您可以在site_mgmt方法中添加一個參數,並在site_mgmt傳遞@driver實例變量。這是一個人為的示例:

class Home
  def site_mgmt(driver)
    elem = driver.find_element(:id, "logo")
  end
end

require 'selenium-webdriver'

@driver = Selenium::WebDriver.for :chrome
@driver.navigate.to "http://www.iana.org/domains/reserved"

link = Home.new.site_mgmt(@driver)
link.click

一些注意事項:1)ruby中的變量是snake_case'd(即site_mgmt而不是siteMgmt ;以及2)不需要在site_mgmt return elem ,因為ruby方法隱式返回。

好吧,事實證明,我要做的就是將@driver變成$ driver。 我仍在學習Ruby,但沒有意識到兩者之間的區別。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM