【问题标题】:Selenium automation: Nomethoderror undefined method 'my method' for nil:nilclassSelenium 自动化:Nomethoderror undefined method 'my method' for nil:nilclass
【发布时间】:2017-10-19 17:26:39
【问题描述】:

背景:我是一个自动化新手,我正在尝试使用 ruby​​ 和 selenium 启动和运行一些测试。我对自己在做什么有了一些了解,但我仍然很年轻。

问题:当我尝试调用应该从页面部分继承该方法的对象上的方法时,我收到“nomethoderror undefined method for nil:nilclass”。

疑难解答和研究:我搜索了关于 nil:nilclass 问题的类似问题,但找不到任何与我正在尝试做的事情真正对应的内容(或者看起来不是那样)在我的菜鸟眼里)。我怀疑我没有正确实例化我试图从中调用该方法的页面部分,但我不确定如何表达这一点以使事情向前发展。

其他东西:我知道还有其他库可以帮助我更好地处理元素和部分(如 siteprism 等),但我正在尝试仅使用 selenium 和 RSpec作为我训练中的一个练习。

这是页面部分的代码

require_relative 'abstract_page'

class PageTitleSection < AbstractPage

   def findPageTitle
        @driver.find_element(:class, 'subheader')
   end

 end

这是页面的代码

require_relative 'abstract_page'
require_relative 'page_title_section'


class TagsPage < AbstractPage
  attr_reader :page_title_section
  @page_title_section

  def self.navigateToTags(driver)
    driver.get('https://stackoverflow.com/tags')
    return TagsPage.new(driver)
    @page_title_section = PageTitleSection.new(driver)
  end
end

这是测试: 需要'rspec' 需要'selenium-webdriver'

require_relative 'spec_helper.rb'
require_relative '../pages/tags_page'
require_relative '../pages/page_title_section'

describe 'Basic navigation and confirmation that page title is visible' do

   it 'should navigate to the tags page and find the title' do
     tags_page = TagsPage.navigateToTags(@driver)
     expect(tags_page.page_title_section.findPageTitle).to eq('Tags')
   end
end

我在 findPageTitle 方法的测试的期望行上收到错误。

我觉得自己很愚蠢,但我希望有人能指出我正确的方向。

【问题讨论】:

  • 你没有具体说明你得到了什么 NoMethodError (它来自哪一行代码)但我注意到TagsPage#navigateToTags 的第三行是无法访问的,因为你无条件地返回第 2 行。我认为这就是问题所在 - 因为@page_title_section 永远不会被设置,那么在你的测试中tags_page.page_title_section 将为零
  • 嘿抱歉,我在测试的 expect() 部分中的 findPageTitle 上遇到了 NoMethodError

标签: ruby selenium-webdriver rspec ui-automation


【解决方案1】:

tags_page.page_title_section 为零。 请注意,在 navigateToTags 方法中,它确实从未被赋值。 return 在它上面。

def self.navigateToTags(driver)
  driver.get('https://stackoverflow.com/tags')
  return TagsPage.new(driver)
  @page_title_section = PageTitleSection.new(driver) # <- unreachable code
end

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-03-19
    • 2016-08-13
    • 1970-01-01
    • 2016-01-02
    • 2012-08-08
    • 2014-09-05
    • 1970-01-01
    • 2015-01-03
    相关资源
    最近更新 更多