使用 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/