سؤال

مع ASP.NET، فإن معرفات العلامات متقلبة للغاية لذا لجعل الاختبارات الخاصة بي أكثر قوة أريد تحديد موقع العناصر بواسطة نصوص الملصقات. لقد لعبت بعضها مع واتين وهذا يفعل ذلك تماما ولكن هذا المشروع يبدو نوعا من الموتى في الوقت الحاضر لذلك اعتقدت أنني أنظر إلى السيلينيوم وكذلك قررت على إطار.

لدي أتش تي أم أل التي تبدو مثل هذا

<label for="ctl00_content_loginForm_ctl01_username">Username</label>:
<input type="text" id="ctl00_content_loginForm_ctl01_username" />

لا أريد الكتابة:

selenium.Type("ctl00_content_loginForm_ctl01_username", "xxx");

هذا يعتمد جدا على المعرف. في واتين كنت أكتب:

browser.TextField(Find.ByLabelText("Username")).TypeText("xxx");

هل هناك طريقة للقيام بذلك في السيلينيوم؟

هل كانت مفيدة؟

المحلول

أعتقد أنه يمكنك القيام بذلك مع ما يلي:

selenium.Type(selenium.getAttribute("//label[text()='Username']/@for"), "xxx");

النص () = 'اسم المستخدم' يحصل على التسمية التي تريدها من خلال Innerhtml، ثم يعطيك / @ لتراجع قيمة سمة "for".

انتباه: لم يتم اختبار هذا (الاعتذار عن ذلك!) لكنني أعتقد أنه سيعمل، بناء على بعض الأدوات الموجودة في البرنامج المساعد IDE

نصائح أخرى

هذا يعمل:

//input[@id=(//label[text()="Username"]/@for)]

Explanation: نظرا لأنك تبحث عن المدخلات:

//input[@id=("ctl00_content_loginForm_ctl01_username")]

استبدل "ctl00_content_loginform_ctl0l1_username" بواسطة قيمة السمة للتسمية:

//label[text()="Username"]/@for

حسنا، قد يكون هذا عمره عام ولكن ما هو مهلا. سيؤدي ذلك إلى تحديد الإدخال الأول أسفل التسمية التي تحتوي على النص "اسم المستخدم".

//label[text()='Username']/input

أفضل ما يفضل استخدام يحتوي على () كما أجد أن بعض المتصفحات تضيف مسافات مزعجة إلى العنصر العرضي:

//label[contains(., 'Username')]/input

لاحظ أن القطع المقطوعة الواحدة قبل الإدخال تشير إلى أنه لن ينظر إلى مستوى واحد فقط، حيث سيحقق الخط المائل المزدوج من جميع المستويات تحت الملصق. استخدم xpather for Firefox لإنشاء وتحقق من Xpaths الخاص بك، فهو مفيد للغاية.

نعم، يمكنك استخدام محددات XPath أو CSS أو DOM لتحديد عنصرك. في هذا المثال، قد يبدو XPath الخاص بك مثل // lable [@ = 'ctl00_content_loginform_ctl0l1_ctl0l1_username'] لتحديد هذه العلامة المعينة.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top