استخدم GetControl للتحكم في الكائنات بخلاف متغير الاسم
سؤال
أنا أستخدم Zope Testbrowser الذي أوصى به في سؤالي الأخير. المشكلة التي أواجهها هي أنه يمكنني استخدام وظيفة getControl للتحكم في كائنات مختلفة مثل: كلمة المرور ، اسم المستخدم ، إلخ.
أحاول إرسال الصفحة للوصول إلى الصفحة التالية ولكن زر الإرسال لا يحتوي على متغير "اسم" ، مجرد متغير "معرف". "إرسال" مكتوب على النحو التالي:
<input type="submit" id="lgn_button" class="button" tabindex="3" accesskey="s" />
والكائنات الأخرى مكتوبة على النحو التالي:
<input type="password" class="button" name="password" id="password" size="24" maxlength="20" accesskey="p" tabindex="2" value=""/></td>
ليس لدي وصول لتغيير هذا. رمز Python Zope الذي أستخدمه للحصول على التحكم في كائن "كلمة المرور" هو:
browser.getControl(name='password')
لا يحتوي زر الإرسال على "اسم" لذلك كتبت:
browser.getControl(id='lgn_button')
هذا يطبع الخطأ بأن "المعرف" غير صالح:
TypeError: getControl() got an unexpected keyword argument 'id'
هل هناك أي طريقة للسيطرة على إحدى القيم الأخرى في "إرسال".
شكرا على اي مساعدة.
المحلول
أفترض أنه ، لسبب أو لآخر ، لا يمكنك إضافة سمة "اسم" إلى العلامة الخاصة بك ، ولكن إذا كان اسم "اسم" فقط لا يمكنك إضافته ، فيمكنك تعيين "قيمة = إرسال" (إرسال "بشكل صريح ( بدلاً من الاعتماد على واحد افتراضي ، والذي يتم إرساله) ثم استخدم Browser.getControl ('إرسال')
إذا فشل ذلك ، يمكنك أن تفعل شيئًا على غرار
for form in browser.mech_browser.forms(): for control in form.controls: if control.id == 'lgn_button': return control
قد ترغب حتى في تمديد المتصفح. ؛)