Я пытаюсь выбрать <option value="20">Betaling ontvangen via Bank</option>
из следующего html-кода (сгенерированного OpenCart) с помощью Mechanize:
<div class="vtabs-content" id="tab-history" style="display: block;">
<div id="history">
<table class="form">
<tbody>
<tr>
<td>Bestelstatus:</td>
<td><select name="order_status_id">
<option value="23">Bestelling geannuleerd</option>
<option value="17">Bestelling ontvangen</option>
<option selected="selected" value="24">Bestelling verzonden</option>
<option value="22">Betaling mislukt</option>
<option value="20">Betaling ontvangen via Bank</option>
<option value="19">Betaling ontvangen via PayPal</option>
<option value="21">Betaling via Bank mislukt</option>
<option value="18">Betaling via PayPal mislukt</option>
<option value="25">Gereed voor afhalen (Delft)</option>
<option value="26">Wachten op betaling</option>
</select></td>
</tr>
<tr>
<td>Mail naar klant:<span class="help">Wel zichtbaar voor klant bij
de bestelinfo.</span></td>
<td><input name="notify" type="checkbox" value="1"></td>
</tr>
<tr>
<td>Opmerkingen</td>
<td>
<textarea cols="40" name="comment" rows="8" style="width: 99%"></textarea>
<div style="margin-top: 10px; text-align: right;">
<a class="button" id="button-history" name=
"button-history">Geschiedenis bijwerken</a>
</div>
</td>
</tr>
</tbody>
</table>
</div>
То, что я сейчас делаю, это:
puts single_order_page.field_with(:name => 'order_status_id').options[0].select
Это печатает:
exampleshop.rb:44:in 'block in <main>': undefined method 'field_with' for #<Mechanize::Page:0x007f8ea514abf0> (NoMethodError)
from /Users/narekaramjan/.rvm/gems/ruby-2.0.0-p353@global/gems/mechanize-2.7.3/lib/mechanize.rb:442:in 'get'
from exampleshop.rb:7:in '<main>'
И puts single_order_page
выводит полный HTML-код страницы. Вы можете посмотреть полный код здесь: http://pastebin.com/pe5pjMzB.
pp single_order_page
выдает этот код: http://pastebin.com/ezSWWqi0
Есть идеи?
Запрос POST для обновления статуса заказа:
$('#button-history').live('click', function() {
$.ajax({
url: 'index.php?route=sale/order/history&token=545c8c415eb6641f29efc9e0b1180d2b&order_id=260',
type: 'post',
dataType: 'html',
data: 'order_status_id=' + encodeURIComponent($('select[name=\'order_status_id\']').val()) + '¬ify=' + encodeURIComponent($('input[name=\'notify\']').attr('checked') ? 1 : 0) + '&append=' + encodeURIComponent($('input[name=\'append\']').attr('checked') ? 1 : 0) + '&comment=' + encodeURIComponent($('textarea[name=\'comment\']').val()),
beforeSend: function() {
$('.success, .warning').remove();
$('#button-history').attr('disabled', true);
$('#history').prepend('<div class="attention"><img src="view/image/loading.gif" alt="" /> Even wachten a.u.b.</div>');
},
complete: function() {
$('#button-history').attr('disabled', false);
$('.attention').remove();
},
success: function(html) {
$('#history').html(html);
$('textarea[name=\'comment\']').val('');
$('#order-status').html($('select[name=\'order_status_id\'] option:selected').text());
}
});
});
Это потому, что field_with
- это метод Form
, а не метод Page
.
Вы хотите сделать что-то вроде:
page = agent.get url
form = page.forms[0]
form['order_status_id'] = 20
next_page = form.submit
Я бы сделал это так:
page = single_order_page.parser
desired_element = page.search('//select[name="order_status_id"]/option[@value="20"]')
Затем сделайте все, что захотите, после этого.
puts
чтобы проверить, правильно ли я выбрал опцию. Не думаю, что код будет работать в этом случае, или я ошибаюсь?