সেলেনিয়াম সহ টেক্সারিয়া থেকে পাঠ্য সাফ করুন


142

আমি কিছু পরীক্ষা পেয়েছি যেখানে আমি পরীক্ষা করছি যে নির্দিষ্ট ক্ষেত্রের পাঠ্যটি অবৈধ হলে সঠিক ত্রুটি বার্তা উপস্থিত হয়। বৈধতার জন্য একটি চেক হল একটি নির্দিষ্ট পাঠ্য উপাদান খালি নয়।

যদি এই টেক্সারিয়ায় ইতিমধ্যে পাঠ্য থাকে তবে আমি কীভাবে সেলেনিয়ামকে ক্ষেত্রটি সাফ করতে বলতে পারি?

কিছুটা এইরকম:

driver.get_element_by_id('foo').clear_field()

1
আমি দেখেছি এটা driver.get_element_by_id ( 'foo বিন্যাস') পরিষ্কার ()।
ইসহাক

উত্তর:


215
driver.find_element_by_id('foo').clear()

4
এটি আমার জন্য সাম্প্রতিক সেলেনিয়াম সংস্করণে কাজ করে না।
পরিসংখ্যানগুলি শিখুন

3
youp ক্রোমড্রাইভারও এটিতে বিরতি দেয়। ফেনিক্স উত্তর সর্বত্র কাজ করে
Norbertas.gulia

1
এটি বিরোধী সেলেনিয়াম এবং ক্রোমড্রাইভার সংস্করণগুলির সাথে সমস্যা হতে পারে। এটি অসম্ভব বলে মনে হচ্ছে যে ডেভগুলি ক্রোমড্রাইভার থেকে ইচ্ছাকৃতভাবে এই কার্যকারিতাটি সরিয়ে ফেলবে।
আইজাক

7
এই মুহুর্তে প্রতিক্রিয়া অ্যাপ্লিকেশনগুলিতে এই উত্তরটি সঠিকভাবে কাজ করে না কারণ স্পষ্ট হিসাবে প্রতিক্রিয়া অন চেঞ্জ ফাংশনটিকে আগুনের কারণ করবে না। সুতরাং আপনার ইনপুট সাফ হয়ে যাবে এবং পরীক্ষাগুলি এগিয়ে যাবে এবং আপনার উপাদানটির অবস্থা আগের মতোই থাকবে। ইস্যু প্রতিক্রিয়া , সেলেনিয়াম ইস্যু
এনক্রিমরো

1
@ncrmro 3 বছর পরে দেখে মনে হচ্ছে এটি এখনও কাজ করে না
স্টিফেন

81

তুমি ব্যবহার করতে পার

 webElement.clear();

যদি এই উপাদানটি কোনও পাঠ্য প্রবেশের উপাদান হয় তবে এটি মানটি পরিষ্কার করবে।

নোট করুন যে এই ইভেন্টটি দ্বারা চালিত ইভেন্টগুলি আপনি প্রত্যাশার মতো নাও হতে পারে। বিশেষত, আমরা কোনও কীবোর্ড বা মাউস ইভেন্টগুলি ফায়ার করি না। আপনি যদি কীবোর্ড ইভেন্টগুলি চালিত হয়েছে তা নিশ্চিত করতে চান তবে এর মতো কিছু ব্যবহার করার কথা বিবেচনা করুন sendKeys(CharSequence)। উদাহরণ:

 webElement.sendKeys(Keys.BACK_SPACE); //do repeatedly, e.g. in while loop

বা:

 webElement.sendKeys(Keys.CONTROL + "a");
 webElement.sendKeys(Keys.DELETE);

4
সিটিআরএল + 'এ' ব্যবহার করার সময় ম্যাকওএসে (অন্যান্য কীবোর্ড শর্টকাটগুলি) যখন পরীক্ষা চলবে তখন পরিস্থিতি বিবেচনা করুন। বিটিডব্লিউ-গুড পরামর্শ, আমার সমস্যা সমাধান করুন।
বাইরে_বক্স

1
আমার সমস্যাগুলি "কীগুলি। ব্যাক_এসপিএসি" দ্বারা সমাধান করা হয়েছে। আমি সন্ধানের ক্ষেত্রটি কেবল ক্যাপচার করেছি, চালাও .ক্লিক () তারপরে একটি লুপের ভিতরে কোড চালান। এটি অনুসন্ধান ক্ষেত্রের আগে থাকা সমস্ত চার্টারিয়ারকে সরিয়ে দেয়। তারপরে অনুসন্ধান ক্ষেত্রে নতুন মান প্রেরণ করুন। জাস্ট। ক্লিয়ার () ফাংশনটি আমার পক্ষে কাজ করছে না।
নোমান_ব্রাহিম

কেবলমাত্র webElement.sendKeys(Keys.BACK_SPACE); //do repeatedly, e.g. in while loopআমার অদ্ভুত ক্ষেত্রে সহায়তা করেছে
চাকি_ব্ল্যাক

17

আমি দৌড়ে এমন একটি মাঠে গিয়েছিলাম যেখানে। ক্লিয়ার () কাজ করেনি। প্রথম দুটি উত্তরের সংমিশ্রণটি ব্যবহার করে এই ক্ষেত্রটির জন্য কাজ করেছে।

from selenium.webdriver.common.keys import Keys

#...your code (I was using python 3)

driver.find_element_by_id('foo').send_keys(Keys.CONTROL + "a");
driver.find_element_by_id('foo').send_keys(Keys.DELETE);

;আবার কিসের জন্য?
স্টিফেন

1
অজগরটিতে @ surfer190 ;দরকার নেই। আমি এটি দুর্ঘটনাক্রমে যুক্ত করেছি। ভালো বল ধরা.
জর্তেগা


4

জাভা জন্য

driver.findelement(By.id('foo').clear();

অথবা

webElement.clear();

যদি এই উপাদানটি কোনও পাঠ্য প্রবেশের উপাদান হয় তবে এটি মানটি পরিষ্কার করবে।


3

এটি সাধারণ বাক্য গঠন

driver.find_element_by_id('Locator value').clear();
driver.find_element_by_name('Locator value').clear();

1

স্পষ্ট একটি সাধারণ কল () এটি ডিওমে প্রদর্শিত হবে যে সংশ্লিষ্ট ইনপুট / টেক্সারিয়া উপাদানটির এখনও তার পুরানো মান রয়েছে, সুতরাং সেই উপাদানটিতে নিম্নলিখিত কোনও পরিবর্তন (যেমন উপাদানটিকে একটি নতুন মান দিয়ে পূরণ করা) সময়মতো প্রক্রিয়া করা হবে না।

আপনি যদি সেলেনিয়াম উত্স কোডটি একবার দেখে থাকেন তবে দেখতে পাবেন যে পরিষ্কার () - পদ্ধতিটি নীচের মন্তব্যে ডকুমেন্টেড রয়েছে:

/ ** যদি এই উপাদানটি কোনও পাঠ্য প্রবেশের উপাদান হয় তবে এটি মানটি সাফ করবে। অন্যান্য উপাদানগুলির উপর কোনও প্রভাব নেই। পাঠ্য প্রবেশের উপাদানগুলি INPUT এবং TEXTAREA উপাদান। নোট করুন যে এই ইভেন্টটি দ্বারা চালিত ইভেন্টগুলি আপনি প্রত্যাশার মতো নাও হতে পারে। বিশেষত, আমরা কোনও কীবোর্ড বা মাউস ইভেন্টগুলি ফায়ার করি না। আপনি যদি কীবোর্ড ইভেন্টগুলি চালিত হয়েছে তা নিশ্চিত করতে চান তবে ব্যাকস্পেস কী দিয়ে l @link #sendKeys (CharSequence ...) like এর মতো কিছু ব্যবহার করার কথা বিবেচনা করুন। আপনি কোনও পরিবর্তন ইভেন্ট পেয়েছেন তা নিশ্চিত করতে, ট্যাব কী দিয়ে l @link #sendKeys (CharSequence ...) to এ কল করার পরে বিবেচনা করুন। * /

সুতরাং একটি ইনপুট / টেক্সেরিয়া (ইতিমধ্যে একটি মান রয়েছে এমন উপাদান) এবং এটিতে একটি নতুন মান নির্ধারণ করার জন্য এই সহায়ক ইঙ্গিতটি ব্যবহার করে আপনি নীচের মতো কিছু কোড পাবেন:

public void waitAndClearFollowedByKeys(By by, CharSequence keys) {
    LOG.debug("clearing element");
    wait(by, true).clear();
    sendKeys(by, Keys.BACK_SPACE.toString() + keys);
}

public void sendKeys(By by, CharSequence keysToSend) {
    WebElement webElement = wait(by, true);
    LOG.info("sending keys '{}' to {}", escapeProperly(keysToSend), by);
    webElement.sendKeys(keysToSend);
    LOG.info("keys sent");
}

private String escapeProperly(CharSequence keysToSend) {
    String result = "" + keysToSend;
    result = result.replace(Keys.TAB, "\\t");
    result = result.replace(Keys.ENTER, "\\n");
    result = result.replace(Keys.RETURN, "\\r");

    return result;
}

এই কোডটি জাভা হওয়ার জন্য এবং পাইথন নয় বলে দুঃখিত। এছাড়াও, আমাকে একটি অতিরিক্ত "ওয়েটউন্টিলপেজআইএসআরডি () - এড়িয়ে যেতে হয়েছিল - এমন পদ্ধতি যা এই পোস্টটিকে আরও দীর্ঘ করে দেবে।

আশা করি এটি আপনার সেলেনিয়ামের যাত্রায় আপনাকে সহায়তা করবে!


1

আমার অভিজ্ঞতায়, এটি সবচেয়ে কার্যকর হিসাবে দেখা গেছে

driver.find_element_by_css_selector('foo').send_keys(u'\ue009' + u'\ue003')

ইনপুট থেকে সমস্ত অক্ষর মুছতে আমরা Ctrl + ব্যাকস্পেস প্রেরণ করছি, আপনি মোছার সাথে ব্যাকস্পেসও প্রতিস্থাপন করতে পারেন।

সম্পাদনা: কীগুলি নির্ভরতা অপসারণ করেছে


0

driver.find_element_by_xpath("path").send_keys(Keys.CONTROL + u'\ue003') ফায়ারফক্সের সাথে দুর্দান্ত কাজ করেছে

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