2

Neu mit Selen ruby ​​aber im Grunde, was ich zu tun, wollen Pass contact['rob', 'email', 'subject', 'message'] inRuby übergibt Werte in Methode? WebDriver

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

und dann, wenn Werte übereinstimmen unter Ausführen von Code:

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 

Voll Code:

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 

Ich bin mir sicher, dass es einen einfacheren Weg gibt, dies zu tun, aber ich versuche nur, mich an die Verwendung von Blöcken mit Code zu gewöhnen.

Fehlermeldung: ': nicht definiert lokale Variable oder Methode `Kontakt' für Standard_web_driver_test2: Klasse (Nameerror)

Neuer Code vor mit globalen Variablen:

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 

Antwort

2

Ihre Klassennamen so etwas wie

sein sollte
class StandardWebdriverTest2 

Wie pro Namenskonvention

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

Sie einen Vorschlag zu dieser Namenskonvention finden here

Sie Zweitens Kontakt Methode innerhalb der Klasse rufen

Dann müssen Sie es Klassenmethode

Sie
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 

sonst machen erhalten Fehler undefined local variable or method "contact" for Standard_web_driver_test2:Class (NameError)

+0

Danke :) Ich habe keine Fehler, keine in der Konsole, wenn Sie laufen, aber name_field.send_keys (Name) Werte werden nicht hineingeschoben, so muss Somethi sein ng sonst – Speedychuck

+0

ja das ist etwas web-treiber funktional problem ..... vorschlag ist bitte überprüfen name_filed wird richtig wählen, um schlüssel zu senden –

+0

Web-treiber-code funktioniert außerhalb der methode block aber einmal drinnen nicht laufen :(@ Rajarshi Das – Speedychuck