Rails seleniumテストの位置決めといくつかのイベントの解釈


最近cucumberテストを书いているうちに、いくつかの问题があって、もともとシステム的に整理するつもりでしたが、この时間がないようで、いくらでも覚えて、雑然と受け取ることができます.
Railsプロジェクトでは、AJAXを使用する場合、検収テストページはcucumberではだめです.cumber自体がwebratを使用したシミュレーションブラウザの動作であるためです.
では、seleniumでテストする必要があります.この場合、いくつかのイベントのパッケージが異なります.
例:

<%= image_submit_tag "image_file_name", :id => "submit" %>

書いてもいいですよ
And I press "submit"

実際にはstep定義を見てpressが呼び出したclickであることを知っていますbutton
もし、私たちのページajaxが複数のsubmitボタン、または複数のinputボックスを呼び出し、同じnameを使用している場合(ループによって生成される場合もあります)
ではcucumberの下でscopeを使うかもしれません

When /^I (press|follow|check|uncheck|choose) "([^\"]*)" for (.*) whose (.*) is "([^\"]*)"$/ do |action, whatyouclick, class_name, var_name, value|
  unless var_name == "id" then
    id = eval("\"#{class_name}\".classify.constantize.find_by_#{var_name}(\"#{value}\").id.to_s")
  else
    id = value
  end
  within("tr[id=row_#{class_name}_#{id}]") do
    case action
      when "press"
        click_button(whatyouclick)
      when "follow"
        click_link(whatyouclick)
      when "check"
        check(whatyouclick)
      when "uncheck"
        uncheck(whatyouclick)
      when "choose"
        uncheck(whatyouclick)
    end
  end
end


しかし、seleniumはwithinをサポートしていないことがわかります.
では、パッケージされたselenium構文を使用してテストする必要があります.

When /(?:|I )press "([^"]*)" via ajax$/ do |locator|
  selenium.click "css=#{locator}"
end

When /^(?:|I )fill in "([^\"]*)" with "([^\"]*)" via ajax$/ do |locator, value|
  selenium.type( "css=#{locator}",value ) 
end

Given /^I check "([^"]*)" via ajax$/ do |locator|
  selenium.check "css=#{locator}"
end

ここで、locatorがサポートできる構文は次のとおりです.
参照
id=id
name=name
dom=javascriptExpression
xpath=xpathExpression
link=textPattern
css=cssSelectorSyntax
詳細については、
http://seleniumhq.org/docs/04_selenese_commands.html
http://release.seleniumhq.org/selenium-core/0.8.0/reference.html
seleniumで属性をhtml範囲内に配置するかどうかについて
下編を参照