Ruby 将值传递给方法?网络驱动程序

标签 ruby selenium-webdriver ui-automation browser-automation

使用 selenium 的 ruby​​ 新手,但基本上我想做的是将 contact['rob', 'email', 'subject', 'message'] 传递到

def contact(name="Default", email="Default", subject="Default", message="Default")
    @name = name
    @email = email
    @subject = subject
    @message = message

然后,如果值匹配,则运行下面的代码:

 if(name == 'rob' && email == 'email' && subject == 'subject' && message == 'message')
  name_field = driver.find_element :css => ('#wpcf7-f375-p28-o1 > form > p:nth-child(2) > span > input')
  name_field.click
  name_field.send_keys(name)

  email_field = driver.find_element :css =>  '#wpcf7-f375-p28-o1 > form > p:nth-child(3) > span > input'
  email_field.click
  email_field.send_keys(email)

  subject_field = driver.find_element :css => '#wpcf7-f375-p28-o1 > form > p:nth-child(4) > span > input'
  subject_field.click
  subject_field.send_keys(subject)

  message_field = driver.find_element :css => '#wpcf7-f375-p28-o1 > form > p:nth-child(5) > span > textarea'
  message_field.click
  message_field.send_keys(message)
    else
      puts 'failed'
      end
  end

完整代码:

require 'rubygems'
require 'selenium-webdriver'

class Standard_web_driver_test2

  driver = Selenium::WebDriver.for :firefox
  driver.get 'http://demoqa.com/contact/'
  driver.manage.window.maximize
  wait = Selenium::WebDriver::Wait.new(:timeout => 5)



  def contact(name="Default", email="Default", subject="Default", message="Default")
    @name = name
    @email = email
    @subject = subject
    @message = message
    if(name == 'rob' && email == 'email' && subject == 'subject' && message == 'message')
  name_field = driver.find_element :css => ('#wpcf7-f375-p28-o1 > form > p:nth-child(2) > span > input')
  name_field.click
  name_field.send_keys(name)

  email_field = driver.find_element :css =>  '#wpcf7-f375-p28-o1 > form > p:nth-child(3) > span > input'
  email_field.click
  email_field.send_keys(email)

  subject_field = driver.find_element :css => '#wpcf7-f375-p28-o1 > form > p:nth-child(4) > span > input'
  subject_field.click
  subject_field.send_keys(subject)

  message_field = driver.find_element :css => '#wpcf7-f375-p28-o1 > form > p:nth-child(5) > span > textarea'
  message_field.click
  message_field.send_keys(message)
    else
      puts 'failed'
      end
  end

  contact['rob', 'email', 'subject', 'message']
end

我确信有一种更简单的方法可以做到这一点,但只是尝试习惯使用带有代码的 block 。

错误消息:':Standard_web_driver_test2 的未定义局部变量或方法“contact”:Class (NameError)

之前使用全局变量的新代码:

require 'rubygems'
require 'selenium-webdriver'

class StandardWebdriverTest2

  @@driver = Selenium::WebDriver.for :firefox
  @@driver.get 'http://demoqa.com/contact/'
  @@driver.manage.window.maximize
  wait = Selenium::WebDriver::Wait.new(:timeout => 5)



  def self.contact(name="Default", email="Default", subject="Default", message="Default")
    @name = name
    @email = email
    @subject = subject
    @message = message
    if(name == 'rob' && email == 'email' && subject == 'subject' && message == 'message')
  name_field = @@driver.find_element :css => ('#wpcf7-f375-p28-o1 > form > p:nth-child(2) > span > input')
  name_field.click
  name_field.send_keys(name)

  email_field = @@driver.find_element :css =>  '#wpcf7-f375-p28-o1 > form > p:nth-child(3) > span > input'
  email_field.click
  email_field.send_keys(email)

  subject_field = @@driver.find_element :css => '#wpcf7-f375-p28-o1 > form > p:nth-child(4) > span > input'
  subject_field.click
  subject_field.send_keys(subject)

  message_field = @@driver.find_element :css => '#wpcf7-f375-p28-o1 > form > p:nth-child(5) > span > textarea'
  message_field.click
  message_field.send_keys(message)
    else
      puts 'failed'
    end

  end

  contact('rob', 'email', 'subject', 'message')
end

最佳答案

你的类名应该类似于

class StandardWebdriverTest2

按照命名约定

Class and Module 
Classes and modules use MixedCase and have no underscores, each word starts with a uppercase letter, e.g. InvoiceItem

您可以找到有关此命名约定的一些建议 here

其次,在类中调用联系方法

然后你需要将其设为类方法

class StandardWebdriverTest2
   #your code rest of the code
   def self.contact(name="Default", email="Default", subject="Default", message="Default")
      #your code for contact
   end
 contact("","","","") # call contact method
 end

否则您会收到错误未定义的局部变量或方法“contact” for Standard_web_driver_test2:Class (NameError)

关于Ruby 将值传递给方法?网络驱动程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36428489/

相关文章:

windows-phone-7 - 如何获取 applicationiconbar 按钮并自动单击它以进行 Windows Phone 7 ui 自动化测试?

silverlight - Silverlight 5的自动化UI测试工具

java - Chrome 参数不起作用

java - Selenium Webdriver + Java - Eclipse : java. lang.NoClassDefFoundError

java - 如果其他测试失败,我可以跳过 Junit 测试吗?

ruby - 如何将自定义元数据写入由 RMagick 创建的图像?

java - 有没有办法使用 Java 或任何其他库在桌面应用程序窗口中获取 "properties"的所有 "control view"?

ruby-on-rails - 从 :through Association 查询

ruby-on-rails - 如何从控制台调用Rails的模型实例方法

ruby-on-rails - 从应用程序中自定义文件夹内的命名空间自动加载