初始化驱动程序方法时出错-未定义的局部变量

时间:2019-11-28 20:35:11

标签: ruby selenium rubygems automated-tests capybara

在我的测试自动化项目中,我将红宝石与水豚,黄瓜和硒一起使用。 (我已经安装了devkit并且chrome正在正常启动)

在网站中寻找要选择的元素时,我使用的是方法driver.findElement (By.xpath (.... etc"),但是在执行黄瓜时,它指示以下错误:

我已经删除并重新安装了selenium-webdriver gem,但是它没有解决。

有人可以帮助我解决为什么WebDriver在这种情况下似乎无效吗?

代码示例

  

(使用标签img查找按钮注销,因为该元素没有名称或ID)

After('@logout') do element = driver.findElement(By.xpath("//img[@src='/Portal/img/user.png']")); element.click end

执行黄瓜结果

功能:登录
说明功能

在ws://127.0.0.1:60121 / devtools / browser / c0bacc6e-697a-4614-b82c-eb324d587df5上监听的DevTools   @logout
  场景:Login_OK#功能/支持/登录。功能:14
    假设我访问主门户网站页面,则为HRP#features / step_definitions / login_steps.rb:1
    何时使用“ abc123”和“ abc123password”登录#功能/step_definitions/login_steps.rb:5
    然后系统执行登录#功能/step_definitions/login_steps.rb:10
    并显示消息“欢迎使用门户”。 #features / step_definitions / login_steps.rb:14
      #(NameError)的未定义局部变量或方法`driver'       ./features/support/hooks.rb:4:in After之后

失败情况:
黄瓜功能/支持/登录。功能:14#方案:Login_OK

1个场景(1个失败) 4个步骤(已通过4个步骤) 0分5.457秒

1 个答案:

答案 0 :(得分:0)

如果您在标准设置中将Capybara与Cucumber一起使用,那么您实际上不应该直接调用硒webdriver实例-driver(在极少数情况下除外)。相反,您应该使用Capybara方法。 After钩中可用的内容完全取决于您在include的位置上进行的操作,但是其中之一可能是可用的

After('@logout') do
  element = page.find(:xpath, ".//img[@src='/Portal/img/user.png']"));
  element.click
end

After('@logout') do
  element = Capybara.current_session.findElement(:xpath, ".//img[@src='/Portal/img/user.png']");
  element.click
end

注意:在包含的图像源上,找到注销按钮的方法可能比在XPath上找到XPath更好,但是如果没有看到按钮的HTML,就无法确定(例如,Capybaras按钮查找器将与按钮匹配)。嵌套在