অ্যাঙ্গুলার e2e প্রোটেক্টর পরীক্ষায় কীভাবে ফাইল আপলোড করবেন


89

আমি একটি কৌণিকর e2e পরীক্ষা ব্যবহার করে ফাইল আপলোড পরীক্ষা করতে চাই। আপনি e2e পরীক্ষায় এটি কীভাবে করেন? আমি আমার পরীক্ষা স্ক্রিপ্ট গ্রান্ট কর্মের মাধ্যমে চালিত করি।


উত্তর:


140

আমি এটি এইভাবে করি:

var path = require('path');

it('should upload a file', function() {
  var fileToUpload = '../some/path/foo.txt',
      absolutePath = path.resolve(__dirname, fileToUpload);

  element(by.css('input[type="file"]')).sendKeys(absolutePath);    
  element(by.id('uploadButton')).click();
});
  1. pathআপনি যে ফাইলটি আপলোড করতে চান তার পুরো পথটি সমাধান করতে মডিউলটি ব্যবহার করুন ।
  2. ইনপুট টাইপ = "ফাইল" উপাদানটির পাথ সেট করুন ।
  3. আপলোড বাটনে ক্লিক করুন।

এটি ফায়ার ফক্সে কাজ করবে না। প্রটেক্টর অভিযোগ করবে কারণ উপাদানটি দৃশ্যমান নয়। ফায়ারফক্সে আপলোড করতে আপনার ইনপুটটি দৃশ্যমান করতে হবে। এই আমি কি কি:

browser.executeAsyncScript(function(callback) {
  // You can use any other selector
  document.querySelectorAll('#input-file-element')[0]
      .style.display = 'inline';
  callback();
});

// Now you can upload.
$('input[type="file"]').sendKeys(absolutePath);    
$('#uploadButton').click();

+1 এটি কাজ করছে। আন্ড্রেস, আপনার ওপি এর প্রতিক্রিয়ার জন্য জিজ্ঞাসা করা উচিত কারণ এটি সঠিক উত্তর হিসাবে গ্রহণযোগ্য হতে পারে।
কোমা

4
প্রটেক্টর দিয়েও কাজ করেছেন।
ইলিয়া বারাহোভস্কি

7
FWIW, __dirnameকখনও কখনও অস্থায়ী ডিরেক্টরিতে নির্দেশ করে (সম্ভবত যেখানে পরীক্ষাগুলি রানার দ্বারা অনুলিপি করা হয়)। যদি এটি process.cwd()হয় __dirnameতবে আপনি তার পরিবর্তে ব্যবহার করতে পারেন ।
বোরিসকুনসকি 14

এটি ক্রোমে আমার জন্য কাজ করছে, তবে অন্যান্য ব্রাউজারগুলির জন্য, প্রটেক্টর অভিযোগ করেন যে উপাদানটি দৃশ্যমান নয় ... কোনও ধারণা?
ওমিদ আহৌরাই

আপনি ফায়ারফক্সের সাথে আপলোড করতে পারবেন না কারণ উপাদানটি দৃশ্যমান নয়। পাথ মান নির্ধারণ করতে আপনাকে উপাদানটি দৃশ্যমান করতে হবে। আপডেট উত্তর দেখুন।
Andres D

15

আপনি সরাসরি পারবেন না।

সুরক্ষার কারণে আপনি এমন কোনও ব্যবহারকারীকে অনুকরণ করতে পারবেন না যে এনজিএসনারিওর মতো কার্যক্ষম পরীক্ষার স্যুটে সিস্টেমে কোনও ফাইল বেছে নিচ্ছে।

প্রটেক্টর দিয়ে, যেহেতু এটি ওয়েবড্রাইভারের উপর ভিত্তি করে, তাই এই কৌশলটি ব্যবহার করা উচিত

প্রশ্ন: ওয়েবড্রাইভার ফাইল আপলোড সমর্থন করে? উত্তর: হ্যাঁ

আপনি নেটিভ ওএস ফাইল ব্রাউজার ডায়ালগের সাথে সরাসরি ইন্টারঅ্যাক্ট করতে পারবেন না, তবে আমরা কিছু ম্যাজিক করি যাতে আপনি যদি কোনও ফাইল আপলোড উপাদানগুলিতে ওয়েবইলেমেন্ট # সেন্ডকিজ ("/ পাথ / টু / ফাইল") কল করেন তবে এটি সঠিক কাজ করবে। নিশ্চিত হয়ে নিন যে আপনি ওয়েবএলিমেন্টটি # ফাইল ক্লিক করেন না () ফাইল আপলোড উপাদান, বা ব্রাউজার সম্ভবত ঝুলবে।

এটি ঠিক কাজ করে:

$('input[type="file"]').sendKeys("/file/path")

এটি এবং অন্য কোনো সাইটে লিঙ্ক প্রশ্নের উত্তর দিতে বলে মনে হচ্ছে না,
activedecay

4

এন্ড্রেস ডি এবং ডেভিডবি 583 এর পরামর্শের একটি কম্বো এখানে দেওয়া হয়েছে যা এর মাধ্যমে কাজ করার সাথে সাথে আমাকে সহায়তা করত ...

আমি প্রবাহের নিয়ন্ত্রণগুলির বিরুদ্ধে চালিত প্রোটেক্টর পরীক্ষা পাওয়ার চেষ্টা করছিলাম।

    // requires an absolute path
    var fileToUpload = './testPackages/' + packageName + '/' + fileName;
    var absolutePath = path.resolve(__dirname, fileToUpload);

    // Find the file input element
    var fileElem = element(by.css('input[type="file"]'));

    // Need to unhide flowjs's secret file uploader
    browser.executeScript(
      "arguments[0].style.visibility = 'visible'; arguments[0].style.height = '1px'; arguments[0].style.width = '1px'; arguments[0].style.opacity = 1",
      fileElem.getWebElement());

    // Sending the keystrokes will ultimately submit the request.  No need to simulate the click
    fileElem.sendKeys(absolutePath);

    // Not sure how to wait for the upload and response to return first
    // I need this since I have a test that looks at the results after upload
    //  ...  there is probably a better way to do this, but I punted
    browser.sleep(1000);

2
var imagePath = 'http://placehold.it/120x120&text=image1';
element(by.id('fileUpload')).sendKeys(imagePath);

এটা আমার জন্য কাজ করছে।


1

ফায়ারফক্সে ফাইল আপলোড করতে আমি এটিই করি, এই স্ক্রিপ্টটি উপাদানটিকে পথের মান নির্ধারণ করার জন্য দৃশ্যমান করে:

   browser.executeScript("$('input[type=\"file\"]').parent().css('visibility', 'visible').css('height', 1).css('width', 1).css('overflow', 'visible')");

0

আমি বুঝতে পারি যে আমি যে ওয়েব অ্যাপ্লিকেশনটির পরীক্ষা করছি সেটিতে ফাইল ইনপুটটি ফায়ারফক্সে কেবল তখনই দৃশ্যমান যখন এটি জাভাস্ক্রিপ্ট ব্যবহার করে দেখার জন্য স্ক্রোল করা হয়, তাই আমি আমার অ্যাপ্লিকেশনটির জন্য এটির কাজ করতে এন্ড্রেস ডি এর কোডটিতে স্ক্রোলইন্টোভিউ () যুক্ত করেছি:

  browser.executeAsyncScript(function (callback) {
        document.querySelectorAll('input')[2]
     .style = '';
        document.querySelectorAll('input')[2].scrollIntoView();

        callback();
    });

(আমি ফাইল ইনপুট উপাদানগুলির জন্য সমস্ত শৈলীও সরিয়েছি)


0

// সি থেকে ফাইল আপলোড করতে: ory ডিরেক্টরি

{

var path = require('path');
var dirname = 'C:/';
var fileToUpload = '../filename.txt';
var absolutePath = path.resolve('C:\filename.txt');
var fileElem = ptor.element.all(protractor.By.css('input[type="file"]'));

fileElem.sendKeys(absolutePath);
cb();

};


সুতরাং পরিবর্তনশীল কি fileToUploadজন্য?
লিংক 242

0

আপনি যদি নীচের পপআপটি না খোলার মাধ্যমে কোনও ফাইল নির্বাচন করতে চান তবে উত্তরটি হ'ল:

var path = require('path'); 
var remote = require('../../node_modules/selenium-webdriver/remote'); 
browser.setFileDetector(new remote.FileDetector()); 
var fileToUpload = './resume.docx';
var absolutePath = path.resolve(process.cwd() + fileToUpload); 
element(by.css('input[type="file"]')).sendKeys(absolutePath);

-3

যদি ব্যবহারকারীরা jQuery লোড করে থাকে তবে বর্তমান নথিভুক্ত সমাধানগুলি কাজ করবে। আমি সমস্ত বিভিন্ন পরিস্থিতিতে ব্যবহারকারীর ত্রুটি পাবেন যেমন: ব্যর্থ: defined সংজ্ঞায়িত নয়

আমি নেটিভ কৌণিক কোড ব্যবহার করে একটি সমাধান ডকুমেন্ট করার পরামর্শ দেব।

যেমন আমি পরামর্শ দেওয়ার পরিবর্তে পরামর্শ দেব:

    $('input[type="file"]') .....

সুপারিশ:

    angular.element(document.querySelector('input[type="file"]')) .....

পরেরটি আরও স্ট্যান্ডার্ড, কৌণিকের উপরে এবং আরও গুরুত্বপূর্ণ jquery প্রয়োজন হয় না

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.