2017-09-25 1 views
1

셀레늄 webDriver를 사용하여 이미지를 dropzone에 업로드하십시오. 이미 사이트 dropzonejsdotcom에 대해 알고 있지만, 내가 reactJS dropzone (http://reactdropzone.azurewebsites.net/example/)에 대한 스크립트를 사용하려고하면 "알 수없는 오류 : Dropzone이 정의되지 않았습니다"라는 메시지가 나타납니다.webdriver를 통해 파일을 업로드하십시오.

JavascriptExecutor executor; 

public ReactDrpzn() { 
    Configuration.browser = "chrome"; 
    this.executor = (JavascriptExecutor) WebDriverRunner.getWebDriver(); 
} 
private By dropzone = By.cssSelector(".filepicker.dropzone.dz-clickable"); 

@Test 
public void drzon() throws IOException, InterruptedException { 
    open("http://reactdropzone.azurewebsites.net/example"); 
    $(dropzone).hover(); 
    String script = "var myZone, blob, base64Image; myZone = Dropzone.forElement('.filepicker.dropzone.dz-clickable');" + 
      "base64Image = 'iVBORw0KGgoAAAANSUhEUgAAAO0AAABQCAYAAAD1GfIkAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsIAAA7CARUoSoAAAAEGSURBVHhe7dPBCcAwAAMxp/vv3ObRJQ4kMJ7gzrb3Doh4/gciRAsxooUY0UKMaCFGtBAjWogRLcSIFmJECzGihRjRQoxoIUa0ECNaiBEtxIgWYkQLMaKFGNFCjGghRrQQI1qIES3EiBZiRAsxooUY0UKMaCFGtBAjWogRLcSIFmJECzGihRjRQoxoIUa0ECNaiBEtxIgWYkQLMaKFGNFCjGghRrQQI1qIES3EiBZiRAsxooUY0UKMaCFGtBAjWogRLcSIFmJECzGihRjRQoxoIUa0ECNaiBEtxIgWYkQLMaKFGNFCjGghRrQQI1qIES3EiBZiRAsxooUY0UKMaCFGtBAjWkjZPk/PAZ8fwt/rAAAAAElFTkSuQmCC';" + 
      "function base64toBlob(r,e,n){e=e||\"\",n=n||512;for(var t=atob(r),a=[],o=0;o<t.length;o+=n){for(var l=t.slice(o,o+n),h=new Array(l.length),b=0;b<l.length;b++)h[b]=l.charCodeAt(b);var v=new Uint8Array(h);a.push(v)}var c=new Blob(a,{type:e});return c}" + 
      "blob = base64toBlob(base64Image, 'image/png');" + 
      "blob.name = 'file.png';" + 
      "myZone.addFile(blob);"; 

    executor.executeScript(script); 
    Thread.sleep(3000);//смотрим результат 
} 

U 여기 https://github.com/SaneQ/Drpzn

+0

이유는이 또한 브라우저 콘솔에서 작동하지 않습니다이다. DropZone 개체는 반응 컨텍스트 내부에 있고 개체는 주 창에서 사용할 수 없습니다. 그래서 어떻게 든 먼저이 객체를 공개하거나 가져와야합니다. –

답변

1

기본적으로 두 단계 :

  • 를 보내

    • 이있는 요소를 찾아 키를 업로드하려는 파일의 위치와 비교하십시오.

    자바 스크립트 :

    const {Builder, By, Key, until} = require('selenium-webdriver'); 
    
    let driver = new Builder() 
        .forBrowser('chrome') 
        .build(); 
    
    driver.get('http://reactdropzone.azurewebsites.net/example/'); 
    driver.findElement(By.xpath('.//input[@type="file"]')).sendKeys('full_path_to_your_file.png'); 
    

    파이썬 :

    from selenium import webdriver 
    
    driver = webdriver.Chrome() 
    driver.get('http://reactdropzone.azurewebsites.net/example/') 
    input_field = driver.find_element_by_xpath('.//input[@type="file"]') 
    input_field.send_keys('full_path_to_your_file.png') 
    
  • 0

    에서 받는다는 가져올 수 있습니다 그래서, DROPZONE 반응에 이미지를 업로드 할 수있는 쉬운 방법을 발견했습니다. 반작용 DOM (본체> 입력) 에 숨겨진 입력을 생성하고 그 후 난 그냥 셀레늄에서 SendKeys ("pathToImg")를 사용

    관련 문제