Hướng dẫn org openqa selenium javascriptexception javascript error: $ is not defined - org openqa selenium javascriptException lỗi javascript: $ không được xác định

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

Selenium webdriver xử lý các lỗi JavaScript như thế nào?

Loại lỗi này xuất hiện tại tab Console khi mở các công cụ nhà phát triển trong trình duyệt. Điều này có thể xảy ra do một số vấn đề chức năng trong trang hoặc do nhật ký bổ sung có thể gây ra vấn đề về hiệu suất. Chúng ta có thể xử lý các lỗi JavaScript với đối tượng trình điều khiển và phương thức quản lý.with the driver object and manage method.

Ngoại lệ JavaScript trong selenium là gì?

Lỗi JavaScript là lỗi WebDriver xảy ra khi tập lệnh do người dùng cung cấp không thực thi.Nguyên nhân cơ bản của lỗi thực thi thường được cung cấp trong thông báo lỗi, cùng với một ngăn xếp được cung cấp bởi công cụ JavaScript trong trình duyệt.

Javascriptexecutor là gì và khi nó được sử dụng là gì?

JavaScriptexecutor là một giao diện được sử dụng để thực thi javascriprt thông qua selenium webdriver.JavaScript là ngôn ngữ lập trình tương tác với HTML trong trình duyệt và để sử dụng chức năng này trong selenium, cần phải có Javascriptexecutor.JavaScriptexecutor cung cấp hai phương thức: Executescript.ExecuteAsyncScript.an interface that is used to execute JavaScriprt through selenium webdriver. JavaScript is a programming language that interacts with HTML in a browser, and to use this function in Selenium, JavascriptExecutor is required. JavascriptExecutor Provides Two Methods: ExecuteScript. ExecuteAsyncScript.

Bài Viết Liên Quan

Chủ Đề