How to Implement Efficient Scrolling in Selenium Web Tests

آخر تحديث في July 8, 2026
How to Implement Efficient Scrolling in Selenium Web Tests

إذا سبق لك أن حاولت أتمتة تطبيق ويب حديث، فأنت تعرف هذا الشعور جيدًا: تكتب اختبار Selenium، يضغط زرًا، ثم — لا شيء. يتضح أن الزر كان خارج نطاق الرؤية، أو ربما كانت الصفحة ما تزال تحمل المزيد من المنتجات أثناء التمرير. مرحبًا بك في عالم صفحات الويب الديناميكية ذات التمرير اللانهائي، حيث يُعد أن تجعل اختباراتك «ترى» ما يراه المستخدم الحقيقي نصف المعركة. أمضيت سنوات وأنا أتعامل مع أتمتة الويب، وأستطيع أن أقول لك: التمرير الفعّال في Selenium ليس مجرد ميزة إضافية؛ بل هو الفارق بين اختبارات هشة وغير موثوقة وأتمتة قوية جاهزة للإنتاج.

دعنا نتعمق في سبب أهمية التمرير في Selenium، وأفضل التقنيات للتعامل مع كل شيء، من القوائم المحمّلة عند الطلب إلى الرؤوس الثابتة، وكيف يمكن لأدوات مثل Thunderbit أن تسرّع سير عملك. سأشاركك أكوادًا عملية، ونصائح خاصة بكل متصفح، وبعض الدروس المستفادة من الميدان — حتى تتوقف عن محاربة اختباراتك وتبدأ في الوثوق بنتائجك.

فهم أساسيات التمرير في Selenium

إذًا، ماذا يعني «التمرير في Selenium» فعليًا؟ في أتمتة الويب، الأمر كله يتعلق بتحريك إطار العرض في المتصفح برمجيًا — إلى أعلى أو أسفل أو يمينًا أو يسارًا أو إلى عنصر محدد — حتى يصبح المحتوى الذي تريد التفاعل معه ظاهرًا فعلًا. بشكل افتراضي، لا يقوم Selenium WebDriver بالتمرير نيابةً عنك. إذا حاولت النقر على عنصر خارج الشاشة، فغالبًا ستواجه الاستثناء المخيف ElementNotInteractableException (GeeksforGeeks). لهذا السبب يُعد التمرير الدقيق والمتعمد أمرًا لا غنى عنه لأتمتة اختبار واجهة المستخدم بشكل موثوق. كل ما في هذا الدليل موجَّه إلى سلسلة Selenium 4.x — إذ تم تقديم إدخال العجلة/التمرير في Selenium 4.2، ولا يزال هو الأسلوب الحالي في أحدث إصدار 4.43 (Selenium downloads). إذا كنت ما زلت تستخدم Selenium 3، فلن تُترجم مقتطفات Actions API، وستحتاج إلى الرجوع إلى أنماط JavascriptExecutor الموضحة لاحقًا.

فيما يلي الأنواع الرئيسية لعمليات التمرير التي ستستخدمها في Selenium:

  • التمرير الرأسي: تحريك الصفحة لأعلى أو لأسفل لإظهار المزيد من المحتوى.
  • التمرير الأفقي: مفيد للجداول العريضة أو الشرائط المتحركة.
  • التمرير إلى عنصر: إظهار عنصر محدد، عادةً باستخدام scrollIntoView.
  • التمرير بالبكسل: تحريك إطار العرض بعدد محدد من البكسلات — مفيد للتمرير التدريجي.
  • التمرير إلى أعلى/أسفل الصفحة: القفز إلى بداية الصفحة أو نهايتها.

لماذا هذا مهم؟ لأن صفحات الويب اليوم مليئة بالعناصر الديناميكية — فكّر في موجزات التمرير اللانهائي، وأزرار «تحميل المزيد»، والرؤوس الثابتة، والصور المحمّلة عند الحاجة. إذا لم يستطع الاختبار التمرير، فلن يتمكن من رؤية نصف الواجهة أو التحقق منه. وهذا يعني أن الأخطاء قد تمر دون اكتشاف، أو تفشل اختباراتك لأسباب خاطئة تمامًا (BrowserStack).

أخطاء شائعة:

  • العثور على عنصر لا يعني أنه مرئي أو قابل للنقر.
  • إجراءات مثل .click() أو .sendKeys() لا تقوم بالتمرير تلقائيًا إلى العنصر.
  • قد تغطي الرؤوس الثابتة العناصر حتى بعد التمرير.
  • صفحات التمرير اللانهائي تتطلب تمريرًا متكررًا وتدريجيًا لتحميل كل المحتوى.

إليك مثالًا سريعًا بلغة Java للتمرير إلى عنصر وإظهاره:

((JavascriptExecutor) driver).executeScript("arguments[0].scrollIntoView(true);", element);

هذا يضمن أن العنصر المستهدف ظاهر في أعلى إطار العرض — لا مزيد من أخطاء «العنصر غير قابل للتفاعل».

لماذا يُعد التمرير الفعّال في Selenium مهمًا لاختبار الويب

لنكن واقعيين: تعتمد معظم تطبيقات الويب الحديثة على محتوى ديناميكي لا يظهر إلا بعد التمرير. وفقًا لبيانات حديثة، هناك أكثر من 516,000 موقع حي يستخدم التمرير اللانهائي عبر jQuery وحده، والعدد الحقيقي على الأرجح أعلى بكثير. إذا كانت اختبارات Selenium الخاصة بك لا تقوم بالتمرير أبدًا، فأنت تفوّت جزءًا ضخمًا من تطبيقك. ChatGPT Image Nov 3, 2025, 02_44_20 PM (1).png أين يكون التمرير مطلوبًا:

  • القوائم اللانهائية/المحمّلة عند الطلب: موجزات التواصل الاجتماعي، شبكات المنتجات، لوحات معلومات SaaS.
  • أزرار «تحميل المزيد»: مواقع التجارة الإلكترونية والأخبار والدلائل.
  • أزرار أو روابط مخفية: عناصر لا تظهر إلا بعد التمرير.
  • الرؤوس الثابتة: قد تغطي العناصر، ما يتطلب موضع تمرير دقيقًا.
  • الجداول الكبيرة أو الشرائط المتحركة: غالبًا تحتاج إلى تمرير أفقي أو داخل الحاوية.
سيناريو الاختبارلماذا يلزم التمرير
موجز محتوى لا نهائي (مثل وسائل التواصل الاجتماعي)يتم تحميل منشورات جديدة أثناء التمرير. يجب أن يكرر الاختبار التمرير لتحميل كل العناصر والتحقق منها.
ترقيم صفحات «تحميل المزيد»لا تظهر العناصر الإضافية في DOM إلا بعد التمرير/النقر.
الصور المحمّلة عند الطلبلا يتم تحميل الصور إلا عندما تدخل إلى نطاق الرؤية—ويجب التمرير للتحقق من أنها كلها موجودة ومحمّلة.
تداخل الرأس الثابت مع المحتوىقد تختفي العناصر أسفل الرأس—ولذلك يجب أن يراعي التمرير هذا التداخل.
الجداول أو الشرائط القابلة للتمرير الكبيرةلا يظهر إلا جزء من المحتوى في كل مرة؛ ويجب التمرير للوصول إلى جميع الصفوف/العناصر والتحقق منها.

العائد على الاستثمار:

  • تحسين تغطية الاختبار: تتحقق من كل عناصر الواجهة، وليس فقط العناصر الظاهرة عند التحميل.
  • تقليل الجهد اليدوي: لا حاجة بعد الآن لتقسيم الاختبارات أو التدخل اليدوي لإظهار المحتوى.
  • أتمتة أكثر موثوقية: حالات فشل كاذبة أقل بسبب أخطاء «العنصر غير موجود» أو «غير قابل للتفاعل».

تخيل موقع تجارة إلكترونية فيه 100 منتج، لكن لا يُحمَّل في كل مرة سوى 20 منتجًا. الاختبار من دون تمرير يفحص 20% فقط من الكتالوج — ويترك 80% دون اختبار. التمرير الفعّال يعني أنك تكتشف المزيد من الأخطاء، وبسرعة أكبر. ChatGPT Image Nov 3, 2025, 02_39_42 PM (1).png

كل طرق التمرير: مقارنة تقنيات التمرير في Selenium

لا يوفّر Selenium أمرًا واحدًا باسم scrollDown()، لكنه يمنحك عدة طرق لإنجاز المهمة. إليك ملخصًا سريعًا:

الطريقةدعم المتصفحمستوى التعقيدأفضل استخدام
واجهة Actions API (إدخال العجلة)Chrome وEdge (Selenium 4)متوسطتمرير أصلي ودقيق إلى عنصر أو بإزاحة محددة
JavaScriptExecutorجميع المتصفحاتسهلالتمرير إلى عنصر، أو بالبكسل، أو إلى نهايات الصفحة
مفاتيح لوحة المفاتيح (Page Down، إلخ)جميع المتصفحاتسهلمحاكاة تمرير المستخدم عبر المفاتيح
التمرير داخل العناصرجميع المتصفحاتمتوسطالتمرير داخل الحاويات والجداول والشرائط المتحركة

التمرير إلى العناصر والبكسلات

التمرير إلى عنصر:
هو الأفضل عندما تعرف بالضبط ما الذي تريد رؤيته.

js.executeScript("arguments[0].scrollIntoView();", webElement);

أو باستخدام Actions API في Selenium 4 (Chrome/Edge):

new Actions(driver).scrollToElement(element).perform();

التمرير بالبكسل:
ممتاز للتمرير التدريجي أو لضبط الموضع بدقة.

js.executeScript("window.scrollBy(0, 350)", "");

استخدم القيم الموجبة للتمرير لأسفل، والسالبة للتمرير لأعلى.

متى تستخدم أيّهما؟

  • فضّل التمرير إلى عنصر عندما تحتاج إلى الدقة والموثوقية.
  • استخدم التمرير بالبكسل عند التحميل التدريجي أو تأثيرات المنظر المتوازي، أو عندما تريد محاكاة تمرير شبيه بالمستخدم.

التمرير إلى أعلى/أسفل الصفحة والتعامل مع التمرير اللانهائي

التمرير إلى أسفل الصفحة:

js.executeScript("window.scrollTo(0, document.body.scrollHeight)");

التمرير إلى أعلى الصفحة:

js.executeScript("window.scrollTo(0, 0)");

التعامل مع التمرير اللانهائي:
ستحتاج إلى حلقة: تمرير، انتظار المحتوى الجديد، ثم التكرار حتى لا يعود هناك المزيد من التحميل.

long lastHeight = (Long) js.executeScript("return document.body.scrollHeight");
while (true) {
    js.executeScript("window.scrollTo(0, document.body.scrollHeight);");
    Thread.sleep(2000); // استخدم الانتظار الصريح في الاختبارات الحقيقية!
    long newHeight = (Long) js.executeScript("return document.body.scrollHeight");
    if (newHeight == lastHeight) break;
    lastHeight = newHeight;
}

هذا النمط يضمن تحميل كل المحتوى، تمامًا كما يفعل المستخدم الحقيقي (Testsigma).

التمرير المخصص في Selenium باستخدام execute_script

لأي شيء يتجاوز الأساسيات، سيكون execute_script في JavaScript هو أفضل صديق لك. يمكنك أن:

  • تمرر على دفعات للحصول على سلوك سلس يشبه المستخدم.
  • تنتظر تحميل المحتوى بعد كل تمرير.
  • تتمرر داخل حاويات محددة (مثل الجداول أو الشرائط المتحركة).
  • تتعامل مع الحالات الطرفية (مثل الرؤوس الثابتة والعناصر الديناميكية).

مثال: تمرير سلس تدريجي

for i in range(10):
    driver.execute_script("window.scrollBy(0, 500);")
    time.sleep(0.5)

مثال: انتظار المحتوى بعد التمرير

js.executeScript("window.scrollTo(0, document.body.scrollHeight);");
WebDriverWait wait = new WebDriverWait(driver, Duration.ofSeconds(10));
wait.until(ExpectedConditions.visibilityOfElementLocated(By.id("new_element")));

أفضل الممارسات:

  • اربط دائمًا عمليات التمرير بانتظار صريح للمحتوى الجديد.
  • استخدم {block: "center"} مع scrollIntoView لتحسين الرؤية عند الحاجة.
  • تجنب التوقفات الثابتة؛ استخدم انتظارات مرتبطة بتغيّر المحتوى الفعلي.
  • بالنسبة للحاويات، استخدم element.scrollTop = ... أو element.scrollBy(...) عبر JS.

تحسين التمرير في Selenium عبر المتصفحات المختلفة

هنا تصبح الأمور مثيرة. ليس كل متصفح يتعامل مع التمرير بالطريقة نفسها:

  • Chrome / Edge / والمتصفحات الأخرى المبنية على Chromium (Brave وOpera وArc): دعم كامل لإدخال العجلة عبر Actions API (scrollToElement وscrollByAmount وscrollFromOrigin) وكذلك JavaScript.
  • Firefox: يعمل التمرير عبر JavaScript كما هو متوقع. إدخال العجلة في Actions API غير مدعوم من geckodriver — ووفقًا لوثائق Selenium، فإن عمليات العجلة خاصة بـ Chromium فقط. استخدم JavascriptExecutor بدلًا من ذلك.
  • Safari: الوضع نفسه كما في Firefox — safaridriver لا يطبّق نقطة نهاية العجلة. التزم بـ JavascriptExecutor وarguments[0].scrollIntoView(...).
  • الوضع عديم الواجهة (Headless): اضبط حجم نافذة صريحًا (driver.manage().window().setSize(...) أو --window-size=1920,1080 في Chrome). من دون ذلك، سيعتمد إطار العرض حجمًا صغيرًا، وقد لا تؤدي المحتويات التي كانت ستظهر خارج الشاشة في متصفح عادي إلى تشغيل التحميل عند الطلب.

نصائح:

  • اختبر منطق التمرير لديك مبكرًا على كل المتصفحات المستهدفة.
  • استخدم JavaScript كخيار احتياطي شامل للتمرير.
  • مع الرؤوس الثابتة، قد تحتاج إلى تمرير بضعة بكسلات إضافية أو استخدام JS مخصّص لتجنب التداخل.
  • في الوضع عديم الواجهة، اضبط حجم النافذة باستخدام driver.manage().window().setSize(...) لضمان سلوك تمرير متسق.

Thunderbit: تسريع تطوير اختبارات Selenium باستخدام الاستخراج الذكي

استخراج بيانات الويب الديناميكية بالذكاء الاصطناعي Get Started Free

Selenium يقود المتصفح، لكنه لا يستخرج البيانات نيابةً عنك — أنت من يكتب المحددات والحلقات وعمليات التحقق. إذا كانت الصفحة التي تختبرها تحتوي على محتوى ديناميكي كثيف التمرير (شبكات المنتجات، موجزات التواصل الاجتماعي، الجداول المحمّلة عند الطلب)، فإن Thunderbit يكون مفيدًا كأداة مرافقة: وجّهها إلى الصفحة، ودعها تقوم بالتمرير + الترقيم + استخراج مجموعة بيانات منظمة، ثم استخدم تلك المجموعة بوصفها المصدر المرجعي الذي تعتمد عليه اختبارات Selenium عند التحقق. إنها طريقة أسرع لبناء «النصف المتوقع» من اختبارك بدلًا من كتابة أداة استخراج مؤقتة من الصفر.

كيف يكمل Thunderbit Selenium:

  • استخرج كل البيانات، حتى من صفحات التمرير اللانهائي: يتولى Thunderbit حلقة التمرير والترقيم نيابةً عنك، ثم يعيد صفوفًا منظمة (أسماء المنتجات، الأسعار، الصور) يمكنك تصديرها إلى CSV أو Sheets.
  • أنشئ بيانات مرجعية لاختباراتك: استخدم Thunderbit لجمع كل بيانات واجهة المستخدم المتوقعة بسرعة، ثم اجعل اختبار Selenium يمر عبر الصفحة ويتحقق من تطابق الواجهة.
  • سرّع تطوير الاختبارات: يمكن لميزة «AI Suggest Fields» في Thunderbit أن تساعدك على تحديد المحددات والبنية، مما يجعل كتابة محددات Selenium أسهل.

مثال على سير العمل:

  1. استخدم Thunderbit لاستخراج كل المنتجات من صفحة تجارة إلكترونية ديناميكية (سيقوم بالتمرير واستخراج كل شيء نيابةً عنك).
  2. صدّر البيانات إلى Google Sheets أو CSV.
  3. في اختبار Selenium، تمرّر عبر الصفحة، وتجمع معلومات المنتجات الظاهرة، وتقارنها بمجموعة بيانات Thunderbit.
  4. تحقّق من أن جميع المنتجات موجودة، وتم تحميلها بشكل صحيح، ولا توجد بيانات مفقودة.

هذا الدمج يعني أنك تقضي وقتًا أقل في كتابة أكواد استخراج هشة، ووقتًا أكثر في التحقق مما يهم فعلًا. وتكون ميزتا استخراج الصفحات الفرعية والاستخراج المجدول في Thunderbit مفيدتين بشكل خاص للمواقع الكبيرة والديناميكية.

جرّب إضافة Thunderbit لمتصفح Chrome للاستخراج الذكي

أمثلة عملية: التمرير الفعّال في حالات Selenium الواقعية

لننتقل إلى التطبيق العملي. إليك بعض السيناريوهات الواقعية والأكواد التي يمكنك تكييفها:

1. التمرير داخل جدول كبير

افترض أن لديك شبكة بيانات لها شريط تمرير خاص بها:

WebElement table = driver.findElement(By.id("data-table"));
js.executeScript("arguments[0].scrollTop = arguments[0].scrollHeight", table);

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

2. التنقل في موجزات التمرير اللانهائي

prev_count = 0
while True:
    driver.execute_script("window.scrollTo(0, document.body.scrollHeight);")
    time.sleep(2)
    posts = driver.find_elements(By.CSS_SELECTOR, ".post")
    if len(posts) == prev_count:
        break
    prev_count = len(posts)

يحمّل كل المنشورات، ويتوقف عندما لا تظهر أي منشورات جديدة.

3. التحقق من الصور المحمّلة عند الطلب

List<WebElement> images = driver.findElements(By.tagName("img"));
for (WebElement img : images) {
    if ("lazy".equals(img.getAttribute("loading"))) {
        js.executeScript("arguments[0].scrollIntoView(true);", img);
        WebDriverWait wait = new WebDriverWait(driver, Duration.ofSeconds(5));
        wait.until(d -> (Boolean) ((JavascriptExecutor)d).executeScript("return arguments[0].complete && arguments[0].naturalWidth > 0;", img));
        Assert.assertTrue((Integer) js.executeScript("return arguments[0].naturalWidth;", img) > 0);
    }
}

يتم تمرير كل صورة محمّلة عند الطلب إلى نطاق الرؤية والتحقق من تحميلها.

4. التمرير الأفقي داخل شريط متحرك

WebElement carousel = driver.findElement(By.className("carousel"));
js.executeScript("arguments[0].scrollBy(300, 0);", carousel);

يتم تمرير الشريط المتحرك إلى اليمين بمقدار 300 بكسل.

5. اكتشاف فشل تحميل المحتوى

بعد كل تمرير، استخدم انتظارات صريحة للتحقق من المحتوى الجديد أو مؤشرات التحميل. إذا حدث تجاوز للمهلة، فقم بتسجيل الحالة واعتبرها فشلًا.

دليل خطوة بخطوة: تنفيذ التمرير الفعّال في Selenium

تعرّف أكثر إلى أفضل ممارسات استخراج البيانات Get Started Free

إليك قائمة مرجعية قابلة للتنفيذ:

  1. حدّد متى يلزم التمرير: هل المحتوى مخفي أم محمّل عند الطلب أم مقسّم إلى صفحات؟
  2. تأكد من وجود العنصر: استخدم انتظارات صريحة للتأكد من أن العناصر موجودة في DOM.
  3. اختر طريقة التمرير المناسبة:
    • التمرير إلى عنصر للدقة.
    • التمرير بالبكسل للتحميل التدريجي.
    • حلقة للتمرير اللانهائي.
  4. نفّذ التمرير: استخدم JavaScript أو Actions API حسب الحالة.
  5. زامن بعد كل تمرير: انتظر تحميل المحتوى الجديد — لا تعتمد على التوقفات الثابتة.
  6. تحقق من المحتوى: بعد التمرير، تأكد من أن العناصر مرئية ومحمّلة وقابلة للتفاعل.
  7. حسّن الأداء عبر المتصفحات: اختبر على جميع المتصفحات المستهدفة؛ واستخدم JS كخيار احتياطي.
  8. ادمج Thunderbit لاستخراج البيانات: استخدم Thunderbit لجلب البيانات مسبقًا أو للتحقق من المجموعات الكبيرة.
  9. قلل التمرير غير الضروري: مرّر فقط بالقدر المطلوب.
  10. وثّق منطقك: علّق على سبب اختيارك لكل أسلوب تمرير.
الخطوةالإجراء الأساسي
تحديد الحاجةهل التمرير مطلوب في هذا السيناريو؟
وجود العنصرانتظر حتى توجد العناصر في DOM
اختيار الطريقةعنصر، بكسلات، حلقة، أو تمرير داخل الحاوية
التنفيذاستخدم JS أو Actions أو المفاتيح حسب الحاجة
المزامنةانتظر المحتوى بعد كل تمرير
التحققأكّد الرؤية والصحة
تحسين المتصفحاختبر عبر Chrome وFirefox وEdge وSafari
دمج Thunderbitاستخدمه لاستخراج/التحقق من البيانات
التقليلتجنب التمريرات المكررة
التوثيقعلّق واشرح النهج

الخلاصة وأهم النقاط

يُعد التمرير الفعّال في Selenium العمود الفقري لأتمتة اختبار ويب حديثة وقوية. مع انتشار المحتوى الديناميكي والتمرير اللانهائي في كل مكان، تحتاج اختباراتك إلى التمرير كما يفعل المستخدم الحقيقي لكي تتحقق فعلًا من واجهة المستخدم. والأهم هو:

  • مرّر بهدف واضح: حدّد متى وأين يلزم التمرير — لا تفترض فقط أن العناصر ستكون مرئية.
  • استخدم الأدوات المناسبة: فضّل التمرير إلى عنصر للدقة، وJavaScript للمرونة، وActions API للسلوك الأصلي حيثما كان مدعومًا.
  • زامن وتحقق: انتظر دائمًا تحميل المحتوى بعد التمرير، وتأكد من أنه مرئي وصحيح.
  • حسّن الأداء لكل المتصفحات: اختبر منطق التمرير في كل مكان، واستخدم JavaScript كخيار احتياطي شامل.
  • استفد من Thunderbit: اجمع Selenium مع Thunderbit لتسريع استخراج البيانات والتحقق منها — خصوصًا في الصفحات ذات التمرير الكثيف أو الديناميكية.

هل أنت مستعد للارتقاء باختبارات Selenium الخاصة بك؟ جرّب دمج إضافة Chrome الخاصة بـ Thunderbit لتطوير اختبارات أذكى وأسرع. وإذا كنت متعطشًا لمزيد من نصائح الأتمتة، فاطّلع على مدونة Thunderbit للحصول على شروحات معمقة ودروس تعليمية.

سرّع اختبارات Selenium مع Thunderbit

تمتّع بتمرير سلس — ولعل اختباراتك تجد دائمًا ما تبحث عنه.

الأسئلة الشائعة

1. لماذا يفشل Selenium أحيانًا في التفاعل مع عناصر موجودة في DOM؟
لأن Selenium لا يقوم تلقائيًا بتمرير العناصر إلى نطاق الرؤية. إذا كان العنصر خارج الشاشة، فقد تحصل على ElementNotInteractableException. استخدم إجراءات التمرير للتأكد من أن العناصر مرئية قبل التفاعل معها.

2. ما أفضل طريقة للتعامل مع صفحات التمرير اللانهائي في Selenium؟
استخدم حلقة: مرّر إلى أسفل الصفحة، وانتظر تحميل المحتوى الجديد، وكرر ذلك حتى لا يعود هناك محتوى جديد. استخدم دائمًا انتظارات صريحة مرتبطة بتغيّر المحتوى، لا توقفات ثابتة.

3. كيف أجعل كود التمرير يعمل عبر جميع المتصفحات؟
يُعد execute_script الخاص بـ JavaScript أكثر الطرق شمولًا. تعمل Actions API جيدًا في Chrome/Edge، لكنها قد لا تكون مدعومة في Safari أو الإصدارات الأقدم من Firefox. اختبر منطقك دائمًا على كل المتصفحات المستهدفة.

4. هل يمكنني التمرير داخل الحاويات أو الجداول، وليس فقط الصفحة الرئيسية؟
نعم! استخدم JavaScript لضبط scrollTop أو scrollBy على عنصر الحاوية. على سبيل المثال: js.executeScript("arguments[0].scrollTop = arguments[0].scrollHeight", tableElement);

5. كيف يساعد Thunderbit في أتمتة اختبارات Selenium؟
يمكن للاستخراج المدعوم بالذكاء الاصطناعي من Thunderbit أن يستخرج كل البيانات من الصفحات الديناميكية أو ذات التمرير اللانهائي، مما يوفّر مجموعات بيانات مرجعية لاختبارات Selenium الخاصة بك. وهذا يجعل التحقق من محتوى واجهة المستخدم أسهل ويسرّع تطوير الاختبارات — خصوصًا للمواقع المعقدة الغنية بالبيانات.

6. هل ما زلت بحاجة إلى كتابة كود التمرير يدويًا في 2026، أم أن Selenium لحق بـ auto-scroll في Playwright؟
يقوم كلٌّ من Playwright والإصدارات الحديثة من Cypress بالتمرير تلقائيًا إلى العناصر قبل التفاعل معها — أما Selenium WebDriver فلا يزال لا يفعل ذلك، ولا توجد إشارة إلى تغيّر هذا في سلسلة 4.x. لذا نعم، في Selenium ما زلت تكتب التمرير بنفسك (Actions API على Chromium، وJavascriptExecutor في بقية الحالات). إذا كنت تبدأ مجموعة اختبارات جديدة من الصفر ولا يوجد لدى الفريق استثمار سابق في Selenium، فإن سلوك التمرير التلقائي أحد الأسباب الحقيقية التي تجعل الناس يختارون Playwright. أما إذا كنت تدير مجموعة Selenium موجودة بالفعل — وهذا هو حال معظم الفرق — فالأنماط الواردة في هذا الدليل لا تزال هي الإجابة الصحيحة.

لمزيد من المعلومات حول Selenium واستخراج البيانات وأفضل ممارسات الأتمتة، تفضل بزيارة مدونة Thunderbit.

جرّب أداة استخراج الويب بالذكاء الاصطناعي للصفحات الديناميكية Get Started Free

Shuai Guan
Shuai Guan
الرئيس التنفيذي في Thunderbit | خبير في أتمتة البيانات بالذكاء الاصطناعي Shuai Guan هو الرئيس التنفيذي لشركة Thunderbit وخريج كلية الهندسة بجامعة ميشيغان. وبالاستناد إلى ما يقرب من عشر سنوات من الخبرة في مجالي التقنية وبنية SaaS، يتخصص في تحويل نماذج الذكاء الاصطناعي المعقدة إلى أدوات عملية لاستخراج البيانات بدون الحاجة إلى البرمجة. في هذه المدونة، يشارك رؤى صريحة ومجرّبة ميدانيًا حول استخراج البيانات من الويب واستراتيجيات الأتمتة، لمساعدتك على بناء سير عمل أذكى يعتمد على البيانات. وعندما لا يكون منشغلاً بتحسين تدفقات العمل الخاصة بالبيانات، يوجّه نفس دقته واهتمامه بالتفاصيل إلى شغفه بالتصوير الفوتوغرافي.
Topics
ScrollScrollingSelenium
جدول المحتويات

استخرج صفحة ويب بمجرد أن تطلب

قل ما تحتاجه بوضوح. أو الأفضل، لا تقل شيئًا على الإطلاق.

جرّب Thunderbit مجاني
استخرج البيانات باستخدام الذكاء الاصطناعي
انقل البيانات بسهولة إلى Google Sheets أو Airtable أو Notion
Chrome Store Rating
PRODUCT HUNT#1 Product of the Week