PHP webdriver รอให้ Ajax ดำเนินการเสร็จสิ้น

Oct 29 2020

เพียงแค่ต้องการตรวจสอบว่า ajax ไม่ได้ดำเนินการอีกต่อไป แต่ไม่มีเอกสารประกอบสำหรับเรื่องนี้มากนัก

คำตอบที่ใกล้ที่สุดที่ฉันพบคือphpwebdriver selenium รอ ajax

ฉันพยายามปรับรหัสในคำตอบด้านล่าง:

public function waitForAjaxComplete()
{

    $wait = new WebDriverWait($driver, 30);
    $wait->until(function(){ $condition = 'arguments[0].call(null, $.active == 0)'; if($driver->executeAsyncScript(array(
            'script' => $condition,
            'args' => array()
        ))
        )
            return true;
    }, 10000);
}

แต่มันส่งคืนสิ่งต่อไปนี้:

PHP Fatal error:  Uncaught Facebook\WebDriver\Exception\UnknownServerException: java.util.HashMap cannot be cast to java.lang.String in vendor/facebook/webdriver/lib/Exception/WebDriverException.php:114

ฉันลองใช้เงื่อนไข $รูปแบบต่างๆแต่มันก็ยังคงกลับมาเหมือนเดิม แน่นอนว่าคนอื่นจะพบว่าโซลูชันนี้มีประโยชน์เนื่องจากจะช่วยตรวจสอบว่าเมื่อใดที่คอนเทนเนอร์ของหน้าเสร็จสิ้นการโหลดเนื้อหาใหม่ผ่าน Ajax หรือเพียงเพื่อให้สามารถยืนยันได้เมื่อจาวาสคริปต์หยุดดำเนินการบนหน้าโดยใช้ php webdriver

คำตอบ

1 OndrejMachulda Nov 04 2020 at 15:11

หากคุณกำลังส่งคำขอ AJAX โดยใช้ jQuery คุณสามารถใช้สิ่งนี้:

$driver->wait()->until( function ($driver) {
        return $driver->executeScript('return jQuery.active === 0;');
    }
);