2016-04-04 8 views
0

Ich lerne Selen Web-Treiber mit Ruby und Seitenobjektmodell. Mein Testcode ist unten:Ruby-Selen/Seite Object Model - Start Browser

Wenn ich den Test ausführen bekomme ich einen Fehler nicht in der Lage Element zu finden, das aufgrund der Seite geladen ist, aber nicht auf den richtigen Link umleiten. Normalerweise würde ich driver.gets verwenden, aber kann es nicht mit dem Seitenobjektmodell arbeiten? mit dem Code unten in einer anderen Klasse

require 'rubygems' 
require 'selenium-webdriver' 
require 'page-object' 




class ContactDemoQa 
    include PageObject 



text_field(:name, :css => '#wpcf7-f375-p28-o1 > form > p:nth-child(2) > span > input') 
text_field(:email, :css => '#wpcf7-f375-p28-o1 > form > p:nth-child(3) > span > input') 
text_field(:subject, :css => '#wpcf7-f375-p28-o1 > form > p:nth-child(4) > span > input') 
text_area(:messages, :css => '#wpcf7-f375-p28-o1 > form > p:nth-child(5) > span > textarea') 
    button(:send, :css => '#wpcf7-f375-p28-o1 > form > p:nth-child(6) > input') 


    def contact_method(name, email, subject, message) 

    self.name = name 
    self.email = email 
    self.subject = subject 
    self.message = message 
    send 
    end 
    browser = 'http://demoqa.com/contact/' 
    browser = Selenium::WebDriver.for :firefox 
    contact_demo_qa = ContactDemoQa.new(browser) 

    contact_demo_qa.contact_method 'rob', '[email protected]', 'test', 'Yellow' 

end 

mit Seitenobjektmodell werden Sie in einer Klasse haben Seite Objekte und Methoden gemeint und dann rufen Sie die Methode?

browser = 'http://demoqa.com/contact/' 
    browser = Selenium::WebDriver.for :firefox 
    contact_demo_qa = ContactDemoQa.new(browser) 

    contact_demo_qa.contact_method 'rob', '[email protected]', 'test', 'Yellow' 
+0

Sind Sie fragen, ob diese letzten 4 Zeilen in der 'ContactDemoQa' Klasse sein sollte oder nicht? Oder fragst du, wo 'driver.get' heißen würde? –

+0

Ich frage, ob die letzten 4 Zeilen in einer anderen Klasse sein sollten, ja. Auch wenn ich diese Klasse laufen unter Hinweis darauf geschieht, da es nicht auf die richtige URL nicht direkt waren die Seitenobjekte sind. Ich vermisse die URL, aber ich weiß nicht, wie ich sie mithilfe des Seitenobjektmodells an die richtige URL verweisen kann. Normalerweise verwende ich driver.gets (http) in Java @JustinKo – Speedychuck

Antwort

1

Sie es falsch zu machen, die Seite Objektmodell bedeutet, alles zu Seite gehört, dass die URL bedeuten, Locator und die Methoden, die auf dieser Seite ausführen soll innerhalb der die Pageobject Klasse befinden, ein Pageobject Klasse Eine Seite, die in Ihrer Benutzeroberfläche sichtbar ist.

in Ihrer Implementierung ist das Problem, das Sie Dinge setzen sind, die nicht innerhalb Seite (zuletzt 4 Zeilen) zu Seite gehören, separat ausgeführt werden soll. Dann sollte der Kontaktseite dieses mag:

#contact_page.rb 

require 'page-object' 

class ContactPage 
    include PageObject 

    text_field(:name, :css => '#wpcf7-f375-p28-o1 > form > p:nth-child(2) > span > input') 
    text_field(:email, :css => '#wpcf7-f375-p28-o1 > form > p:nth-child(3) > span > input') 
    text_field(:subject, :css => '#wpcf7-f375-p28-o1 > form > p:nth-child(4) > span > input') 
    text_area(:messages, :css => '#wpcf7-f375-p28-o1 > form > p:nth-child(5) > span > textarea') 
    button(:send, :css => '#wpcf7-f375-p28-o1 > form > p:nth-child(6) > input') 

    page_url 'http://demoqa.com/contact/' 

    def contact_method(name, email, subject, message) 
    self.name = name 
    self.email = email 
    self.subject = subject 
    self.message = message 
    send 
    end 
end 

Der Test Testamentsvollstrecker wie folgt definieren sollte:

#testdemo.rb 

require 'selenium-webdriver' 
require 'page-object/page_factory' 
require_relative 'contact_page.rb' 

include PageObject::PageFactory 

#--set up-- 
@browser = Selenium::WebDriver.for :firefox 
#---------- 

#test execution 
visit(ContactPage) 
on(ContactPage).contact_method('rob', '[email protected]', 'test', 'Yellow') 
+0

Also, was ist der Punkt, in diesem, wie funktioniert sie es machen mehr zuverlässig die Objekte und Methoden in einer Klasse mit und sie dann mit dem Test Demo-Klasse aufrufen. Haben Sie andere Beispiele für Seitenobjekte? – Speedychuck