এইচটিএমএল ইনপুটটির মান পুনরুদ্ধার করতে সেলেনিয়াম ওয়েব ড্রাইভার ব্যবহার করা


122

একটি ওয়েবঅ্যাপের এইচটিএমএলে নিম্নলিখিত কোড রয়েছে

<input type="text" name="prettyTime" id="prettyTime" class="ui-state-disabled prettyTime"  readonly="readonly">

পৃষ্ঠায় আসলে যা প্রদর্শিত হবে তা হ'ল সময়টি প্রদর্শন করে।

সেলেনিয়াম ওয়েব ড্রাইভারে আমার কাছে একটি WebElementবিষয় <input>ব্যবহারের উল্লেখ রয়েছে

WebElement timeStamp = waitForElement(By.id("prettyTime"));

আমি WebElementপৃষ্ঠাতে যা মুদ্রিত হয়েছে তার মান বা অন্য কথায়, পেতে চাই । আমি সমস্ত WebElementপ্রাপ্তদের চেষ্টা করেছিলাম এবং ব্যবহারকারীর দ্বারা দেখা প্রকৃত মূল্য পুনরুদ্ধার করা যায় নি। কোন সাহায্য? ধন্যবাদ।

উত্তর:


211

চেষ্টা element.getAttribute("value")

textসম্পত্তি একটি উপাদান ট্যাগে টেক্সট জন্য। ইনপুট উপাদানগুলির জন্য, প্রদর্শিত পাঠ্য <input>ট্যাগ দ্বারা মোড়ানো হয় না , পরিবর্তে এটি valueগুণকের অভ্যন্তরে থাকে।

দ্রষ্টব্য: কেস বিষয়গুলি। আপনি যদি "মান" নির্দিষ্ট করেন তবে আপনি একটি 'নাল' মান ফিরে পাবেন। এটি অন্তত সি # এর ক্ষেত্রে সত্য।


12
getAttribute("value")হয় সত্যিই কিভাবে আপনি এই কাজ করতে ?! এটা কোন মানে না। valueকোনও inputউপাদানের গুণক এবং তার বৈশিষ্ট্যের মধ্যে একটি বড় পার্থক্য রয়েছে value। সেলেনিয়াম কি jQuery এর মতো ভয়ঙ্কর কাজ করে এবং তাদের সংঘবদ্ধ করে?
টিজে ক্রাউডার

যে কি আমি মধ্যে ডান এখন bumped করেছি: একটি পাঠ্য এলাকা, যা তন্ন তন্ন একটি "মান" অ্যাট্রিবিউট থেকে একটি মান পেতে চেষ্টা, কিংবা একটি মধ্যবর্তী-ট্যাগ পাঠ্য (যেমন "মান" অ্যাট্রিবিউট পরিবর্তনশীল সেট।
সিএফ

2
ঠিক আছে, দেখা যাচ্ছে যে বৈশিষ্ট্যটি অনুপস্থিত থাকলে, এটি সম্পর্কিত সম্পত্তিটি পাওয়ার চেষ্টা করবে। সুতরাং আপনি একটি টেক্সেরিয়া থেকে "মান" নিতে পারেন।
সিএফ

স্পষ্টতই, আমি একমাত্র এইভাবেই অ্যাংগুলেট উপাদান ফর্মের ক্ষেত্রগুলি অ্যাক্সেস করতে পেরেছি
ইয়েনেনিফার

জাভাস্ক্রিপ্ট ব্যবহারকারীদের জন্য, awaitব্যবহার করার সময় ভুলবেন না getAttribute
জেফ্রি মার্টিনেজ

28

আপনি এটির মতো করতে পারেন:

webelement time=driver.findElement(By.id("input_name")).getAttribute("value");

এটি আপনাকে ওয়েবপৃষ্ঠায় প্রদর্শিত সময় দেবে।


17

সেলেনিয়াম 2 সহ,

আমি সাধারণত এটি লিখি:

WebElement element = driver.findElement(By.id("input_name"));
String elementval = element.getAttribute("value");

অথবা

String elementval = driver.findElement(By.id("input_name")).getAttribute("value");


5

আমি ব্যবহার করছি @ragzzy এর উত্তর অনুসরণ করা

 public static string Value(this IWebElement element, IJavaScriptExecutor javaScriptExecutor)
    {

        try
        {
            string value = javaScriptExecutor.ExecuteScript("return arguments[0].value", element) as string;
            return value;
        }
        catch (Exception)
        {
            return null;
        }
    }

এটি বেশ ভালভাবে কাজ করে এবং ডোমকে পরিবর্তন করে না


5

যেমনটি আগে উল্লেখ করা হয়েছিল, আপনি এরকম কিছু করতে পারেন

public String getVal(WebElement webElement) {
    JavascriptExecutor e = (JavascriptExecutor) driver;
    return (String) e.executeScript(String.format("return $('#%s').val();", webElement.getAttribute("id")));
}

তবে আপনি দেখতে পাচ্ছেন যে আপনার উপাদানটিতে অবশ্যই একটি idবৈশিষ্ট্য থাকতে হবে এবং আপনার পৃষ্ঠায় jquery থাকতে হবে।


1

যদি ইনপুট মানটি কোনও স্ক্রিপ্ট দ্বারা পপুলেটে যায় যাতে কিছুটা বিলম্ব থাকে (উদাঃ এজেএক্স কল) তবে ইনপুটটি পপুল হওয়া পর্যন্ত আপনাকে অপেক্ষা করতে হবে। যেমন

var w = new WebDriverWait(WebBrowser, TimeSpan.FromSeconds(10));
            w.Until((d) => {
                // Wait until the input has a value...

                var elements = d.FindElements(By.Name(name));

                var ele = elements.SingleOrDefault();

                if (ele != null)
                {
                    // Found a single element

                    if (ele.GetAttribute("value") != "")
                    {
                        // We have a value now
                        return true;
                    }
                }

                return false;
                });

        var e = WebBrowser.Current.FindElement(By.Name(name));

        if (e.GetAttribute("value") != value)
        {
            Assert.Fail("Result contains a field named '{0}', but its value is '{1}', not '{2}' as expected", name, e.GetAttribute("value"), value);
        }

0

element.GetAttribute ( "মান");

ঘটনাচক্রে যদি আপনি এইচটিএমএল ডোমে "মান" বৈশিষ্ট্যটি না দেখেন তবে আপনি জিইউআইতে প্রদর্শিত ক্ষেত্রের মানটি পাবেন।


-1

এটি হ্যাকির মতো, তবে এটি কাজ করে।

আমি ব্যবহৃত JavascriptExecutorএবং যোগ divHTML এ, এবং পাঠ্য পরিবর্তন divকরতে $('#prettyTime').val()আমি তখন সেলেনিয়াম ব্যবহৃত পুনরুদ্ধার করতে divএবং তার মান দখল। মানটির যথার্থতা পরীক্ষা করার পরে, আমি সবে তৈরি হওয়া ডিভটি সরিয়েছি।


11
এটি গ্রহণযোগ্য উত্তর হওয়া উচিত নয়। জেএস ব্যবহার করেও, আপনি কেবল কার্যকর করতে পারেন এবং এটি (ডিওএমের সাথে গোলযোগের পরিবর্তে) ফিরে আসতে পারেন।
ম্যাট লুঙ্গো 0
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.