我正在尝试机械化Apple Dev Portal“编辑iOS配置文件”中的选择设备部分,可以找到here(如果您已登录)。
源代码如下:
<form name="profileEdit" method="get" action="https://developer.apple.com/services-developerportal/QH43B2/account/ios/profile/regenProvisioningProfile.action?content-type=text/x-url-arguments&accept=application/json&requestId=838c910b-f63d-843e7b1ce126&userLocale=en_US&teamId=BF5K33D" successURL="/account/ios/profile/profileDownload.action?provisioningProfileId=">
<input type="hidden" name="distributionType" value='store'/>
<input type="hidden" name="returnFullObjects" value="false"/>
<div class="nameSection">
<dl>
<dt class="selectDevices">Devices:</dt>
<dd class="selectDevices">
<div class="table">
<div class="rows">
<div><input type="checkbox" name="deviceIds" class="validate" value="8T8RG7HX" id="devices-6" ><span class="title">iPhone 4 - JC</span></div>
<div><input type="checkbox" name="deviceIds" class="validate" value="7Y9F8N47" id="devices-7" ><span class="title">iPhone 5 - DP</span></div>
<div><input type="checkbox" name="deviceIds" class="validate" value="ZNES97W7" id="devices-8" checked><span class="title">iPhone 5 - JC</span></div>
<div><input type="checkbox" name="deviceIds" class="validate" value="CRDSL7S5" id="devices-9" checked><span class="title">iPod 4 inch</span></div>
</div>
</div>
</dd>
<dd class="form-error deviceIds hidden">Please select a Device</dd>
</dl>
</div>
<div class="bottom-buttons">
<a class="button small left cancel"><span>Cancel</span></a>
<a class="button small blue right submit"><span>Generate</span></a>
</div>
</form>
我想要做的就是检查所有方框:
form = page.form_with(:name => 'profileEdit') or raise UnexpectedContentError
form.checkboxes_with(:name => 'deviceIds').each do |checkbox|
puts checkbox["id"] # prints correct value of devices-6...
checkbox.check
end
form.method = 'GET'
form.submit
我没有遇到运行时错误,但是当我刷新实际页面时,并不是按照我的意图检查所有复选框。我错过了什么吗?
答案 0 :(得分:0)
至于我的理解,您的问题是您在设置checkboxes
之后访问实际页面,这将无效。但是如果你检查submit
之后返回的结果,你会发现Mechanize已经设置了复选框并返回了响应。
如果您想在实际的浏览器中直观地看到它,您可能需要使用Watir
/ Webdriver
等。
答案 1 :(得分:0)
为此:
form.checkboxes_with(:name => 'deviceIds').each do |checkbox|
puts checkbox["id"] # prints correct value of devices-6...
checkbox.check
end
这些导致了什么:
tmp1 = form.checkboxes_with(:name => 'deviceIds').map { |cb| cb.check }
tmp2 = form.checkboxes_with(:name => 'deviceIds').map { |cb| cb.checked? }
我希望两者都[true, true, true, true]
。如果没有,有些东西正在清除那些。 check()
方法在RadioButton
中实现,它确实清除了所有同名按钮的已检查状态,但它应限制为radiobutton
类型。 checked
属性本身是可写的,因此您可以尝试直接编写它:
form.checkboxes_with(:name => 'deviceIds').each do |cb|
cb.checked = true
end
并避免该页面/机械化/无论什么可能是错误或不一致。只是一个猜测,但有些尝试。