Tôi đã sử dụng selenium
(với python bindings và thông qua protractor
chủ yếu) trong một thời gian khá dài và mỗi khi tôi cần thiết để thực thi một mã javascript, tôi đã sử dụng phương pháp execute_script()
. Ví dụ, for scrolling the page (python):Hiểu thực thi kịch bản async trong Selenium
driver.execute_script("window.scrollTo(0, document.body.scrollHeight);")
Hoặc, cho infinite scrolling inside an another element (thước đo góc):
var div = element(by.css('div.table-scroll'));
var lastRow = element(by.css('table#myid tr:last-of-type'));
browser.executeScript("return arguments[0].offsetTop;", lastRow.getWebElement()).then(function (offset) {
browser.executeScript('arguments[0].scrollTop = arguments[1];', div.getWebElement(), offset).then(function() {
// assertions
});
});
Hoặc, để có được một dictionary of all element attributes (python):
driver.execute_script('var items = {}; for (index = 0; index < arguments[0].attributes.length; ++index) { items[arguments[0].attributes[index].name] = arguments[0].attributes[index].value }; return items;', element)
Tuy nhiên, API WebDriver cũng có execute_async_script()
mà tôi chưa từng sử dụng.
Bao gồm các trường hợp sử dụng nào? Khi nào tôi nên sử dụng execute_async_script()
thay vì execute_script()
thông thường?
Câu hỏi này đặc biệt về selen, nhưng không thuyết phục về ngôn ngữ.
Cảm ơn bạn đã liên kết đến javaDoc - có một số mẫu được đề cập. Cá nhân bạn có cần phải thực thi một tập lệnh không đồng bộ không? Nếu có, bạn có thể mô tả (các) ca sử dụng không? Việc đó thật sự hữu ích. – alecxe
Đã thêm một số ví dụ. Hy vọng rằng có ý nghĩa. – hankduan
Tuyệt vời, đây là một cuộc hành trình thú vị vào kịch bản phía khách hàng của thước đo góc và nội bộ khác! Cảm ơn một lần nữa. Về lý thuyết, hãy tưởng tượng: nếu tôi thử nghiệm một ứng dụng góc với các ràng buộc python selen - tôi sẽ cần tải các kịch bản lệnh phía máy khách tương tự (hoặc giống nhau) và gọi các hàm 'testForAngular()' và 'waitForAngular()' không đồng bộ theo thứ tự để kiểm tra và chờ cho Angular "trở nên ổn định". Chính xác? – alecxe