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

相關問題