1

Selenium、Java、およびクラスローダーを使用して、要素を含むHTMLページにpdfファイルをアップロードしています

type="file"

私のコードは次のとおりです。

    String fileURI = ClassLoader.getSystemResource("file.pdf").getFile();

    setText(DOCUMENTATION_FILE_FIELD, fileURI);

    public void setText(Locator textField, String text) throws Exception {
         HtmlInput htmlInput = (HtmlInput) getElement(textField);
        pageUtils.page = (HtmlPage) htmlInput.setValueAttribute(text);
    }

ページの「アップロード」ボタンを押しても何も起こりません。エラーなし、ファイルはアップロードされません。からテキストを取得するDOCUMENTATION_FILE_FIELDと、正しいパスが表示されます。グーグルで検索すると、セキュリティ上の理由からファイルを自動的にアップロードできないというフォーラムを読みました。これは正しいです?この場合、これを行う他の方法はありますか。

4

2 に答える 2

0

<input type="file">フィールドを設定するには、テキストを設定するのではなく、値を設定します! したがって、メソッドを使用しないでくださいsetText()(どこから来たとしても)、値を設定するもの ( setValue()? setArgument()?) を使用してください。

また、<input type="file">要素はファイルの URL を受け入れ、絶対パスを取ります。これは、ファイルに絶対パスが必要であることも意味します。JAR ファイル内に埋め込むことはできません。JAR ファイルに埋め込まれている場合は、最初にコピーする必要があります。次に、それへのパスを取得します。アクセス可能な場合は、

URL fileUrl = ClassLoader.getSystemResource("file.pdf");
String filePath = new File(fileUrl.toURI)).getAbsolutePath();

その後、要素の属性filePathとしてを設定できます。value<input>


あなたはSeleniumについて言及していますが、そのメソッドを使用していません。実際に Selenium を使用する場合は、次の 2 つのオプションがあります。

  • Selenium RC の場合Selenium#attachFile()メソッド:

    selenium.attachFile("id=yourFileInputId", fileUrl);
    
  • Selenium WebDriver の場合、WebElement#sendKeys()メソッド

    driver.findElement(By.id("yourFileInputId")).sendKeys(filePath);
    
于 2013-07-25T00:36:28.810 に答える