有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

javascript如何下载“惰性”加载图像<img load=“lazy”

我使用了JavaScript executer&;能够找到ImageElement,但是当我尝试提取URL(用于下载image.svg)时,我得到了一个错误“NoTouchElementException”,下面是我的代码:

((JavascriptExecutor)driver).executeScript("window.open('https://www.lambdatest.com/selenium-automation/','_blank');");                     
wait.until(webDriver -> ((JavascriptExecutor) webDriver).executeScript("return document.readyState").equals("complete"));         
WebDriverWait wait = new WebDriverWait(driver, Duration.ofSeconds(10));  
JavascriptExecutor js = (JavascriptExecutor) driver;   

By Image=By.xpath("//img[@title='Jenkins']");            
js.executeScript("window.scrollTo(0, document.body.scrollHeight)");           
      //  Below commented snippet is giving Error 
/*WebElement ImageElemnt =driver.findElement(Image); 
   String src = ImageElemnt.getAttribute("src");    
    System.out.println(src);*/



wait.ignoring(NoSuchElementException.class).until(ExpectedConditions.invisibilityOfElementLocated(Image))

共 (1) 个答案

  1. # 1 楼答案

    问题说明:

    代码的第一行是

    ((JavascriptExecutor)driver).executeScript("window.open('https://www.lambdatest.com/selenium-automation/','_blank');");  
    

    这基本上意味着你正试图在一个新的选项卡中打开https://www.lambdatest.com/selenium-automation/。Selenium不知道,直到您告诉Selenium,您现在必须切换到不同的选项卡,以便进一步执行

    所以,你的代码行应该是这样的

    ((JavascriptExecutor)driver).executeScript("window.open('https://www.lambdatest.com/selenium-automation/','_blank');");  
    ArrayList<String> tabs2 = new ArrayList<String> (driver.getWindowHandles());
    driver.switchTo().window(tabs2.get(1));
    

    更新1:

    ((JavascriptExecutor) driver).executeScript("window.open('https://www.lambdatest.com/selenium-automation/','_blank');");
    ArrayList<String> tabs2 = new ArrayList<String>(driver.getWindowHandles());
    driver.switchTo().window(tabs2.get(1));
    Thread.sleep(5000);
    WebElement ele = wait.until(ExpectedConditions.elementToBeClickable(By.xpath("//img[@title='Jenkins']")))
    js.executeScript("arguments[0].scrollIntoView(true);", ele);
    String src = ele.getAttribute('src')
    System.out.println(src);