Selen-WebDriverRails BDD konnte nicht sichtbar XPath "/ html" (Capybara :: ElementNotFound)
finden, wenn ich versuche, Integrationstest ich an dieser Behauptung nicht zu tun:
@user = FactoryBot.create(:user)
@client = FactoryBot.create(:client, user: @user)
@event = FactoryBot.create(:event, client: @client)
visit client_path(@client)
click_link "Bill"
und diese erhalten
FehlerAnd an invoice is created to the client # features/step_definitions/new_invoice_steps.rb:9
Unable to find visible xpath "/html" (Capybara::ElementNotFound)
./features/step_definitions/new_invoice_steps.rb:12:in `"an invoice is created to the client"'
features/new_invoice.feature:15:in `And an invoice is created to the client'
Hier ist der Link Code
<%= link_to "Bill", bill_client_path(@client), method: :post%>
Diese
ist die Methode, die ich nennen, die in der Client-Controller ist
def bill
#some code here
respond_to do |format|
if invoice.save
flash[:success] = 'Invoice was successfully created.'
format.html { redirect_to invoice}
format.json { render :show, status: :created, location: invoice }
else
format.html { render :new }
format.json { render json: invoice.errors, status: :unprocessable_entity }
end
end
end
Als ich kurz nach dem Link klicken Sie byebug und Typ stoppen current_url es gab mir diese
"http://www.example.com/clients/1/bill"
, die nicht über eine Sicht, weil die Rechnungsmethode zur Rechnungsansicht umgeleitet werden soll. Capybara ist auf dieser Seite festgefahren und hat mir natürlich eine leere Seite gegeben. Warum Capybara nicht die zweite Umleitung bekommen? Wie repariere ich das?
Prüfprotokoll
Started POST "/clients/1/bill" for 127.0.0.1 at 2017-12-18 15:54:55 +0100
Processing by ClientsController#bill as HTML
Parameters: {"id"=>"1"}
[1m[36mUser Load (0.7ms)[0m [1m[34mSELECT "users".* FROM "users" WHERE "users"."id" = ? LIMIT ?[0m [["id", 1], ["LIMIT", 1]]
[1m[36mClient Load (0.9ms)[0m [1m[34mSELECT "clients".* FROM "clients" WHERE "clients"."user_id" = ? AND "clients"."id" = ? LIMIT ?[0m [["user_id", 1], ["id", 1], ["LIMIT", 1]]
[1m[36mEvent Exists (0.4ms)[0m [1m[34mSELECT 1 AS one FROM "events" WHERE "events"."client_id" = ? AND "events"."billed" IS NULL LIMIT ?[0m [["client_id", 1], ["LIMIT", 1]]
No template found for ClientsController#bill, rendering head :no_content
Completed 204 No Content in 210ms (ActiveRecord: 2.0ms)
Welchen Treiber verwenden Sie mit Capybara? Welche Capybara Konfigurationseinstellungen verwenden Sie? Was machst du bevor du auf den Link klickst? Zeigen Sie auch den Stacktrace, der zu Ihrem Fehler gehört. Siehe - https://stackoverflow.com/help/how-to-ask. Wahrscheinlich liegt es daran, dass Ihr POST-Link als GET interpretiert wird, weil er nicht "capybara/rails" benötigt oder ein Fehler in Ihrem JS verhindert, dass der UJS-Code initialisiert wird. Unmöglich ohne mehr Informationen zu erzählen. –
Weitere Informationen hinzugefügt – power96
Wenn Sie tatsächlich 'Selen-Webdriver' für diesen Test verwenden (es öffnet Firefox oder Chrome Browserfenster, etc.) dann ist es höchstwahrscheinlich, dass Sie einen Fehler in Ihrem JS haben, der verhindert, dass Schienen ujs richtig initialisiert werden Der click_link erzeugt ein GET und nicht einen POST. Überprüfen Sie Ihr test.log, um den Typ der Anfrage zu überprüfen. –