2

新红宝石与硒,但基本上是我想要做的就是通contact['rob', 'email', 'subject', 'message']Ruby将值传入方法? webdriver的

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 

我相信有这样做的更简单的方法,但只是试图习惯于使用代码块。

错误信息:“:未定义的局部变量或方法'接触”的Standard_web_driver_test2:类(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 

回答

2

你的类名应该是这样的

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 

否则你会得到错误undefined local variable or method "contact" for Standard_web_driver_test2:Class (NameError)

+0

谢谢:)我没有错误没有在控制台运行时,但是,name_field.send_keys(名称)值没有被推入所以必须是somethi ng else – Speedychuck

+0

yes这是网页驱动程序功能性问题.....建议请检查name_filed正在选择正确发送密钥 –

+0

网页驱动程序代码在方法模块之外工作,但一旦进入内部不运行:(@ Rajarshi Das – Speedychuck

相关问题