Thông báo lỗi này ...
org.openqa.selenium.JavascriptException: javascript error: $ is not defined
[Session info: chrome=79.0.3945.130]
Build info: version: '3.14.0', revision: 'aacccce0', time: '2018-08-02T20:19:58.91Z'
System info: host: 'OPTIMIZEQ-LTP03', ip: '192.168.99.1', os.name: 'Windows 10', os.arch: 'amd64', os.version: '10.0', java.version: '11.0.2'
Driver info: org.openqa.selenium.remote.RemoteWebDriver
Capabilities {acceptInsecureCerts: false, browserName: chrome, browserVersion: 79.0.3945.130, chrome: {chromedriverVersion: 78.0.3904.105 [60e2d8774a81..., userDataDir: C:\Users\SHAILE~1.SIN\AppDa...}, goog:chromeOptions: {debuggerAddress: localhost:61006}, javascriptEnabled: true, networkConnectionEnabled: false, pageLoadStrategy: normal, platform: XP, platformName: XP, proxy: Proxy[manual, http=localhos..., setWindowRect: true, strictFileInteractability: false, timeouts: {implicit: 0, pageLoad: 300000, script: 30000}, unhandledPromptBehavior: dismiss and notify, webdriver.remote.sessionid: f5a47b27537f019dacb73462732...}
... ngụ ý rằng crômedriver không thể tương tác với bối cảnh duyệt web, tức là phiên trình duyệt Chrome.ChromeDriver was unable to interact with the Browsing Context i.e. Chrome Browser session.
Lặn sâu
Theo tài liệu trong tham chiếu HERROR: "X" không được xác định lỗi này có nghĩa là có một biến không tồn tại được tham chiếu ở đâu đó trong cây Dom. Biến này cần được khai báo, hoặc bạn cần đảm bảo rằng nó có sẵn trong tập lệnh hoặc phạm vi hiện tại của bạn.
Gợi ý: Khi tải thư viện [chẳng hạn như jQuery], hãy đảm bảo nó được tải trước khi bạn truy cập các biến thư viện, chẳng hạn như "$". Đặt thẻ tải thư viện trước mã của bạn sử dụng nó.: When loading a library [such as jQuery], make sure it is loaded before you access library variables, such as "$". Put the tag that loads the library before your code that uses it.
Theo thảo luận JavaScript / jQuery - Hồi $ không được xác định Kết xuất HTML DOM.
Dung dịch
Trong những trường hợp này, có 3 [ba] cách tiếp cận khác nhau có sẵn để giải quyết vấn đề như sau:
Thư viện JQuery là một tệp JavaScript duy nhất và bạn tham khảo nó với thẻ HTML
trong phần
0 như sau:Điều này đi ra ngoài và nhận mã jQuery từ nguồn.
Lưu ý: Bạn không cần phải bao gồm
1 bên trong thẻ
vì điều này là không cần thiết trong HTML5. JavaScript là ngôn ngữ kịch bản mặc định trong HTML5 và trong tất cả các trình duyệt hiện đại.: You do not have to include
1 inside the
tag as this is not required in HTML5. JavaScript is the default scripting language in HTML5 and in all modern browsers.
- Bạn cũng có thể tải xuống thư viện jQuery và tham chiếu nó cục bộ trên máy chủ.
- Bạn có thể tạo ra sự bất lịch việc của WebDriverWait với các điều kiện dự kiến cho trạng thái mong muốn của yếu tố hoặc có thể hiển thị / có thể nhìn thấy / có thể tương tác.
Bạn có thể tìm thấy một cuộc thảo luận chi tiết trong selenium: Selenium xác định các yếu tố có thể nhìn thấy hay không? Có thể là nó được tải trong DOM nhưng không được hiển thị trên UI?
Usecase này
Như bạn đã đề cập, dòng sau thất bại:
Coords elementCoords = ofElement[driver, element];
Phương pháp này lấy một trong các đối số [cuối cùng] làm yếu tố, nhưng trong khi xác định bạn dường như đang coi nó như một danh sách các yếu tố, như trong:
@SuppressWarnings["UnusedDeclaration"]
public Set ofElements[WebDriver driver, WebElement... elements] {
return ofElements[driver, Arrays.asList[elements]];
}
Có vẻ như một số không phù hợp trong các loại đối số ở đây.
Cân nhắc bổ sung
Bạn cần phải chăm sóc một vài điều nhiều hơn:
- Bạn đang sử dụng crômedriver = 78.0.3904.105
- Ghi chú phát hành của crômedriver = 78.0 đề cập rõ ràng như sau:
Hỗ trợ Chrome phiên bản 78Chrome version 78
- Bạn đang sử dụng Chrome = 79.0
- Ghi chú phát hành của Chromedriver v79.0 đề cập rõ ràng như sau:
Hỗ trợ Chrome phiên bản 79Chrome version 79
- Phiên bản máy khách Selenium của bạn là 3.14.0 của 2018-08-02T20: 19: 58,91z, tuổi gần 1,5 tuổi.1.5 years older.
- Phiên bản JDK của bạn là 11.0.2.11.0.2.
Vì vậy, có sự không phù hợp rõ ràng giữa JDK V8U111, Selenium Client v3.3.1, Chromedriver V2.41 và trình duyệt Chrome V79.0
Dung dịch
Trong những trường hợp này, có 3 [ba] cách tiếp cận khác nhau có sẵn để giải quyết vấn đề như sau:
- Thư viện JQuery là một tệp JavaScript duy nhất và bạn tham khảo nó với thẻ HTML
trong phần
0 như sau: - Điều này đi ra ngoài và nhận mã jQuery từ nguồn.
- Lưu ý: Bạn không cần phải bao gồm
1 bên trong thẻvì điều này là không cần thiết trong HTML5. JavaScript là ngôn ngữ kịch bản mặc định trong HTML5 và trong tất cả các trình duyệt hiện đại.
- Bạn cũng có thể tải xuống thư viện jQuery và tham chiếu nó cục bộ trên máy chủ.
Tôi đang cố gắng xác minh Carousel có các tùy chọn tự động flash và lựa chọn thủ công. Đối với tùy chọn thủ công, tôi đã kiểm tra các dấu chấm bóng có thể nhấp. Đối với tùy chọn Auto Flash, tôi đang kiểm tra Phong Animate-Repeate lớn hơn 0. Tôi đang sử dụng JavaScript để kiểm tra các kiểu CSS. Tôi đang nhận được phần tử không được định nghĩa trong dòng dưới đây.
js.executeScript["const repeatValue = element.style.animate-repeat;"];
Chức năng lớp trang
public MasterBannerPage verifyClickAndFlash[] {
//locate slick buttons
List carouselButtons = driver.findElements[By.xpath["//ul[@class='slick-dots']/li[@role='presentation']/button[@role='tab']"]];
WebDriverWait wt = new WebDriverWait[driver,1];
//verify slick dot are clickable
for[WebElement button: carouselButtons] {
wt.until[ExpectedConditions.elementToBeClickable [button]];
}
JavascriptExecutor js = [JavascriptExecutor] driver;
//verify auto flash
js.executeScript["const element = document.querySelector['main-carousel'];"];
js.executeScript["const repeatValue = element.style.animate-repeat;"];
//verify auto flash
js.executeScript ["repeatValue > 0;"];
//boolean result = [boolean] js.executeScript ["document.getElementsByClassName['main-carousel'].style.animate-repeat>0;"];
boolean result = [boolean] js.executeScript ["repeatValue > 0;"];
System.out.print[result];
//Assert.assertTrue[result];
//return new Master Banner page object
return new MasterBannerPage[];
}
Lỗi
org.openqa.selenium.JavascriptException: javascript error: element is not defined
Phong cách
:root {
--animate-duration: 1s;
--animate-delay: 1s;
--animate-repeat: 1;
}
Nên làm gì để sửa chữa cái này?
Hỏi ngày 16 tháng 8 lúc 9:33Aug 16 at 9:33
Vấn đề đã được đề cập trong lỗi. Tôi đã sử dụng một yếu tố không xác định. Phần tử phải là một yếu tố web không phải là một hằng số. Tất cả những gì tôi phải thực hiện định vị phần tử web bằng selenium và nhận tất cả các kiểu CSS liên quan đến phần tử không chỉ các kiểu được đề cập trong thuộc tính kiểu HTML. Sau đó nhận được giá trị tài sản tôi cần.
Dưới đây là mã đã làm việc cho tôi.
JavascriptExecutor js = [JavascriptExecutor] driver;
WebElement carousel = driver.findElement[By.xpath["//div[@class='slick-track']"]];
String script = "var s = getComputedStyle[arguments[0]];"+
"var v = s.getPropertyValue['animation-iteration-count'];"+
"return v;";
System.out.println[js.executeScript[script, carousel]];
Đã trả lời ngày 18 tháng 8 lúc 14:10Aug 18 at 14:10