সেলেনিয়ামে পরিচিত উপাদানগুলির মূল উপাদান নির্বাচন করুন


116

আমার একটি নির্দিষ্ট উপাদান রয়েছে যা আমি সেলেনিয়াম 1 দিয়ে নির্বাচন করতে পারি ।

দুর্ভাগ্যক্রমে পছন্দসই আচরণ পেতে আমার পিতামাত্রে ক্লিক করতে হবে। আমি যে উপাদানটি সহজেই সনাক্ত করতে পারি তাতে অনিচ্ছাকৃত বৈশিষ্ট্যযুক্ত এটি ক্লিক করার জন্য মৃত করে তুলেছে। এক্সপ্যাথ দিয়ে আমি কীভাবে উপরের দিকে নেভিগেট করব ?

উত্তর:


169

সেখানে বেশ কয়েকটি বিকল্প রয়েছে। নমুনা কোডটি জাভাতে রয়েছে, তবে অন্য ভাষাগুলির কাছে একটি বন্দরটি সোজা হওয়া উচিত।

javascript:

WebElement myElement = driver.findElement(By.id("myDiv"));
WebElement parent = (WebElement) ((JavascriptExecutor) driver).executeScript(
                                   "return arguments[0].parentNode;", myElement);

জন্য XPath:

WebElement myElement = driver.findElement(By.id("myDiv"));
WebElement parent = myElement.findElement(By.xpath("./.."));

ড্রাইভার থেকে প্রাপ্ত WebElement

দ্রষ্টব্য: আপনি দেখতে পাচ্ছেন, জাভাস্ক্রিপ্ট সংস্করণের জন্য আপনার প্রয়োজন হবে driver। যদি আপনার এটিতে সরাসরি অ্যাক্সেস না থাকে তবে আপনি এটি WebElementব্যবহার করে এটি পুনরুদ্ধার করতে পারেন :

WebDriver driver = ((WrapsDriver) myElement).getWrappedDriver();

41
এবং আপনি যদি দাদুর কাছে নেভিগেট করতে চান তবে বাই.এক্সপাথ ("../ ..") ব্যবহার করুন।
মনসাইনর

@Monsignor ওয়ার্কস শুধু ফাইল পাথ ... বা URL পাথ মত: stackoverflow.com/questions/8577636/../../questions/8577636/...
jpaugh

এই এক্সপ্যাথগুলির কোনওটিই সেলেনিয়ামের সাথে ব্যবহারের জন্য সঠিক নয়। By.xpath(“./..”)ডিওএম ট্রি ব্যবহার করার সময় একটিকে সঠিকভাবে চলার জন্য ব্যবহার করা দরকার element.findElement। শীর্ষস্থানীয় "./" প্রসঙ্গ নোড সেট করা প্রয়োজন।
জিমএভান্স

35

সম্পর্কে আরও কিছু XPath axes

যাক আমাদের HTMLকাঠামোর নীচে রয়েছে:

<div class="third_level_ancestor">
    <nav class="second_level_ancestor">
        <div class="parent">
            <span>Child</span>
        </div>
    </nav>
</div>
  1. //span/parent::*- প্রত্যক্ষ পিতামাতার যে কোনও উপাদান প্রদান করে।

এই ক্ষেত্রে আউটপুট হয় <div class="parent">

  1. //span/parent::div[@class="parent"]- শুধুমাত্র সঠিক নোড প্রকারের প্যারেন্ট উপাদানটি প্রদান করে এবং কেবলমাত্র নির্দিষ্ট প্রিডিকেট সত্য হলে।

আউটপুট: <div class="parent">

  1. //span/ancestor::*- সমস্ত পূর্বপুরুষকে (পিতামাতাসহ) প্রদান করে।

আউটপুট: <div class="parent">, <nav class="second_level_ancestor">, <div class="third_level_ancestor">...

  1. //span/ancestor-or-self::*- সমস্ত পূর্বপুরুষ এবং বর্তমান উপাদান নিজেই ফিরিয়ে দেয়।

আউটপুট: <span>Child</span>, <div class="parent">, <nav class="second_level_ancestor">, <div class="third_level_ancestor">...

  1. //span/ancestor::div[2]- প্রকারের দ্বিতীয় পূর্বপুরুষ (পিতামাতার থেকে শুরু করে) প্রদান করে div

আউটপুট: <div class="third_level_ancestor">


হ্যালো @ অ্যান্ডারসন আমার প্রশ্নটি সম্পর্কে আমার সাহায্য দরকার আপনার কি একবার দেখার জন্য সময় আছে? তুমাকে অগ্রিম ধন্যবাদ. stackoverflow.com/questions/54647055/...

18

আসুন আপনার ডোম হিসাবে বিবেচনা করুন

<a>
    <!-- some other icons and texts -->
    <span>Close</span>
</a>

এখন আপনাকে <span>পাঠ্যের উপর ভিত্তি করে প্যারেন্ট ট্যাগ 'এ' নির্বাচন করতে হবে , তারপরে ব্যবহার করুন

driver.findElement(By.xpath("//a[.//span[text()='Close']]"));

ব্যাখ্যা: নোডটি তার শিশু নোডের মানের উপর ভিত্তি করে নির্বাচন করুন


আমরা খুঁজছি হয় divযা আবার একাধিক আছে divs দিয়ে তারপর পরিবর্তে নেস্টেড হয় .//spanমধ্যে By.xpath("//div[.//span[text()='Close']]")আমরা ব্যবহার করতে পারি *//span, তা দেওয়া বিঘত অধিকাংশ পিতা বা মাতা div উপাদান জন্য চেহারা হবে। এখন এটি এর মতো দেখাবেdriver.findElement(By.xpath("//div[*//span[text()='Close']]"));
জয় প্রাক

14

সম্ভাব্য এক্সপাথ অক্ষটি একবার দেখুন , আপনি সম্ভবত সন্ধান করছেন parent। আপনি কীভাবে প্রথম উপাদানটি সন্ধান করছেন তার উপর নির্ভর করে আপনি কেবল এর জন্য এক্সপথটি সামঞ্জস্য করতে পারেন।

বিকল্পভাবে আপনি ডাবল-ডট বাক্য গঠন চেষ্টা করতে পারেন , ..যা বর্তমান নোডের পিতামাতাকে নির্বাচন করে।


5

এটি অন্য কারও জন্য উপকারী হতে পারে: এই নমুনাটি এইচটিএমএল ব্যবহার করে

<div class="ParentDiv">
    <label for="label">labelName</label>
    <input type="button" value="elementToSelect">
</div>
<div class="DontSelect">
    <label for="animal">pig</label>
    <input type="button" value="elementToSelect">
</div>

উদাহরণস্বরূপ, আমি একই বিভাগে একটি উপাদান নির্বাচন করতে চাই (যেমন ডিভ) লেবেল হিসাবে, আপনি এটি ব্যবহার করতে পারেন

//label[contains(., 'labelName')]/parent::*//input[@value='elementToSelect'] 

এই মাত্র মানে, একটি লেবেল জন্য বর্ণন (এটা ভালো কিছু পারা a, h2) নামক labelName। সেই লেবেলের পিতামাতায় নেভিগেট করুন (যেমন div class="ParentDiv")। মান সহ কোনও সন্তানের উপাদান খুঁজে পেতে সেই পিতামাতার বংশধরদের মধ্যে অনুসন্ধান করুন elementToSelect। এটির elementToSelectসাহায্যে এটি DontSelectডিভের সাথে দ্বিতীয়টি পিতামাতার হিসাবে নির্বাচন করবে না ।

কৌশলটি হ'ল আপনি প্রথমে পিতামাতাকে নেভিগেট করে এবং তারপরে আপনার প্রয়োজনীয় উপাদানটির জন্য সেই পিতামাতার বংশধরকে অনুসন্ধান করে কোনও উপাদানটির জন্য অনুসন্ধানের ক্ষেত্রগুলি হ্রাস করতে পারবেন। অন্যান্য সিনট্যাক্সের মতো following-sibling::h2কিছু ক্ষেত্রেও ব্যবহার করা যেতে পারে। এর অর্থ ভাইবোন নিম্নলিখিত উপাদান h2। এটি একই পিতামাতার সাথে একই স্তরের উপাদানগুলির জন্য কাজ করবে।


0

আপনি xpath এ / প্যারেন্ট :: নোড () ব্যবহার করে এটি করতে পারেন । চাইল্ড এলিমেন্টস এক্সপথে কেবলমাত্র যুক্ত / পিতামাতাকে :: নোড () যুক্ত করুন

উদাহরণস্বরূপ: চাইল্ড এলিমেন্টের এক্সপথটি চাইল্ড এলিমেন্ট এক্সপাথ

তারপরে তার পূর্ববর্তী পূর্বপুরুষের এক্সপথ হবে চাইল্ড এলিমেন্টএক্সপথ / প্যারেন্ট :: নোড ()

এর পরবর্তী পূর্বপুরুষের এক্সপথ হবে চাইল্ড এলিমেন্টএক্সপথ / প্যারেন্ট :: নোড () / প্যারেন্ট :: নোড ()

ইত্যাদি

এছাড়াও, আপনি কোনও উপাদান ব্যবহার করে কোনও পূর্বপুরুষের নেভিগেট করতে পারেন 'childElementXpath/ancestor::*[@attr="attr_value"]'। এটি কার্যকর হবে যখন আপনার কাছে একটি চেনা শিশু উপাদান রয়েছে যা অনন্য but


0

নীচে সেলেনিয়ামের সাহায্যে আমরা প্যারেন্ট ট্যাগটি নির্বাচন করতে পারি:

driver.findElement(By.xpath("//table[@id='abc']//div/nobr[.='abc']/../.."));

এটি আপনাকে পরিচিত এলিমেন্টের পিতামহী খুঁজে পেতে সহায়তা করবে। তাত্ক্ষণিক অভিভাবক উপাদানটি খুঁজে পেতে কেবল একটি (/ ..) সরান।

ভালো লেগেছে:

driver.findElement(By.xpath("//table[@id='abc']//div/nobr[.='abc']/..));

এটি বাস্তবায়নের জন্য আরও কিছু উপায় রয়েছে, তবে এটি আমার পক্ষে কার্যকর ছিল।

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