সেলেনিয়াম ওয়েবড্রাইভারে জাভাস্ক্রিপ্ট ব্যবহার করে এক্সপথ দ্বারা উপাদান পাওয়ার কোনও উপায় আছে কি?


251

আমি এরকম কিছু খুঁজছি:

getElementByXpath(//html[1]/body[1]/div[1]).innerHTML

আমাকে জেএস ব্যবহার করে উপাদানগুলির অভ্যন্তরীণ এইচটিএমএল পাওয়া দরকার (এটি সেলেনিয়াম ওয়েবড্রাইভার / জাভাতে ব্যবহার করার জন্য, যেহেতু ওয়েবড্রাইভার এটি নিজেই খুঁজে পায় না) তবে কীভাবে?

আমি আইডি বৈশিষ্ট্যটি ব্যবহার করতে পারি, তবে সমস্ত উপাদানগুলির আইডি বৈশিষ্ট্য নেই ute

[FIXED]

জাভাতে এটি সম্পন্ন করতে আমি jsoup ব্যবহার করছি। এটি আমার প্রয়োজনের জন্য কাজ করে।


2
ঘটনাক্রমে, htmlএবং bodyনির্বাচকরা অতিরিক্ত প্রয়োজন হয় যেহেতু ডিআইভি অবশ্যই বডি (অবিলম্বে বা গভীর) এর বংশধর হতে হবে এবং বডি অবশ্যই এইচটিএমএল এর সন্তানের হতে হবে, সুতরাং নথিতে অন্য কোনও ডিআইভি উপাদান নেই, //DIV[1]কাজ করা উচিত (যদিও আমি সুন্দর এক্সপথ এক্সপ্রেশনে মরিচা)। ডিওএম সমতুল্য document.getElementsByTagName('div')[1](বা হতে পারে 0)।
রবজি

উত্তর:


420

আপনি ব্যবহার করতে পারেন document.evaluate:

এক্সপথ এক্সপ্রেশন স্ট্রিংয়ের মূল্যায়ন করে এবং সম্ভব হলে নির্দিষ্ট ধরণের ফলাফল প্রদান করে।

এটি ডাব্লু 3-মানকৃত এবং সম্পূর্ণ নথিভুক্ত: https://dePLer.mozilla.org/en-US/docs/Web/API/Docament.evaluate

function getElementByXpath(path) {
  return document.evaluate(path, document, null, XPathResult.FIRST_ORDERED_NODE_TYPE, null).singleNodeValue;
}

console.log( getElementByXpath("//html[1]/body[1]/div[1]") );
<div>foo</div>

https://gist.github.com/yckart/6351935

মজিলা বিকাশকারী নেটওয়ার্কের একটি দুর্দান্ত ভূমিকা রয়েছে: https://developer.mozilla.org/en-US/docs/ পরিচয়_পরিচালনা_এক্সপাথ_ইন_ জাভা স্ক্রিপ্ট# ডকুমেন্ট.এভালুয়েট


বিকল্প সংস্করণ, ব্যবহার করে XPathEvaluator:


11
9 নম্বর যাদুটির অর্থ কী? এখানে নামযুক্ত ধ্রুবক ব্যবহার করা ভাল।
উইল Sheppard

5
@ উইলশেপার্ড XPathResult.FIRST_ORDERED_NODE_TYPE === 9 ডেভেলপার.মোজিলা.আর.ইন-
ডকস /

2
আমি একটি getElementByXPath ফাংশন লিখেছি যার আইই সমর্থন রয়েছে তবে আপাতত কিছু বুনিয়াদি এক্সপথ সমর্থন রয়েছে। সেখানে একটি ফাংশন getElementXpath আছে এবং তারা আমার যা প্রয়োজন তার জন্য তারা একসাথে সুন্দরভাবে কাজ করে। gist.github.com/Joopmicroop/10471650
joopmicroop

@ সিরোসন্তিলি হ্যাঁ স্যার, এটি: w3.org/TR/DOM-Lelvel-3-XPath/xpath.html#XPathEvaluator-evaluate
ইয়াকার্ট

var xpathResult = ডকুমেন্ট.ভ্যালুয়েট (xpathExpression, প্রসঙ্গের নোড, নেমস্পেসরেসোলভার, ফলাফল টাইপ, ফলাফল);
টেকডোগ

164

Chrome ডি সরঞ্জামগুলিতে আপনি নিম্নলিখিতগুলি চালাতে পারেন:

$x("some xpath")

1
আমি এটি নিয়ে কাজ করেছি এবং এটি কাজ করে মনে হচ্ছে, তবে এই বৈশিষ্ট্যের জন্য কোনও ডকুমেন্টেশন আছে কি? আমি কিছুই পেলাম না।
এরিক

এটি উচ্চতর হতে হবে। ফায়ারফক্সও এটিকে সমর্থন করে।
আইসওয়ার্ড

আপনি নিজের ওয়েব পৃষ্ঠাটি ডিবাগ করার সময় এটি খুব কার্যকর। ধন্যবাদ।
thyranitp

@ এরিক ডকুমেন্টেশন: developers.google.com/web/tools/chrome-devtools/console/…
rybo111

21

ক্রোম কমান্ড লাইন এপিআই থেকে x এর মতো কোনও কিছুর জন্য (একাধিক উপাদান নির্বাচন করতে) চেষ্টা করুন:

var xpath = function(xpathToExecute){
  var result = [];
  var nodesSnapshot = document.evaluate(xpathToExecute, document, null, XPathResult.ORDERED_NODE_SNAPSHOT_TYPE, null );
  for ( var i=0 ; i < nodesSnapshot.snapshotLength; i++ ){
    result.push( nodesSnapshot.snapshotItem(i) );
  }
  return result;
}

এই এমডিএন ওভারভিউটি সহায়তা করেছে: https://developer.mozilla.org/en-US/docs/ ভূমিকা_ থেকে_ ব্যবহার_এক্সপাথ_ইন_ জাভা স্ক্রিপ্ট


9

আপনি জাভাস্ক্রিপ্টের ডকুমেন্ট ব্যবহার করতে পারেন । আমি মনে করি এটি এক উপায়ে বা অন্য কোনও ব্রাউজারগুলিতে IE 6 এ সমর্থিত।

এমডিএন: https://developer.mozilla.org/en-US/docs/Web/API/ ডকুমেন্ট / মূল্যায়ন

IE এর পরিবর্তে সিলেক্টনোড সমর্থন করে।

এমএসডিএন: https://msdn.microsoft.com/en-us/library/ms754523(v=vs.85).aspx


7
আমি লক্ষ করতে চাই যে {document.evaluate val IE তে কাজ করে না in
ক্রিস্টোফার বেলস

2

আপনার লক্ষ্য ধরে নেওয়া হ'ল স্ক্রিন মানচিত্রের জন্য আপনার এক্সপথ ক্যোয়ারীগুলি বিকাশ এবং পরীক্ষা করা। তারপরে হয় ক্রোমের বিকাশকারী সরঞ্জামগুলি ব্যবহার করুন । এটি আপনাকে ম্যাচগুলি দেখানোর জন্য xpath ক্যোয়ারী চালানোর অনুমতি দেয়। অথবা ফায়ারফক্স> 9 এ আপনি ওয়েব বিকাশকারী সরঞ্জাম কনসোল দিয়ে একই জিনিস করতে পারেন । পূর্ববর্তী সংস্করণে এক্স-পাথ-ফাইন্ডার বা ফায়ারব্যাগ ব্যবহার করুন


2
public class JSElementLocator {

    @Test
    public void locateElement() throws InterruptedException{
        WebDriver driver = WebDriverProducerFactory.getWebDriver("firefox");

        driver.get("https://www.google.co.in/");


        WebElement searchbox = null;

        Thread.sleep(1000);
        searchbox = (WebElement) (((JavascriptExecutor) driver).executeScript("return document.getElementById('lst-ib');", searchbox));
        searchbox.sendKeys("hello");
    }
}

আপনি এটির জন্য সঠিক লোকেটারটি ব্যবহার করছেন তা নিশ্চিত করুন।


1
হাই প্রিত, প্রশ্নটি ছিল তার এক্সপ্যাটের ভিত্তিতে কোনও উপাদান দ্বারা নির্বাচন করা। আপনার প্রদত্ত সমাধানটি আইডি দ্বারা এটি নির্বাচন করা। :)
গৌরব থান্ট্রি

2
**Different way to Find Element:**

IEDriver.findElement(By.id("id"));
IEDriver.findElement(By.linkText("linkText"));
IEDriver.findElement(By.xpath("xpath"));

IEDriver.findElement(By.xpath(".//*[@id='id']"));
IEDriver.findElement(By.xpath("//button[contains(.,'button name')]"));
IEDriver.findElement(By.xpath("//a[contains(.,'text name')]"));
IEDriver.findElement(By.xpath("//label[contains(.,'label name')]"));

IEDriver.findElement(By.xpath("//*[contains(text(), 'your text')]");

Check Case Sensitive:
IEDriver.findElement(By.xpath("//*[contains(lower-case(text()),'your text')]");

For exact match: 
IEDriver.findElement(By.xpath("//button[text()='your text']");

**Find NG-Element:**

Xpath == //td[contains(@ng-show,'childsegment.AddLocation')]
CssSelector == .sprite.icon-cancel

0
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;

System.setProperty("webdriver.chrome.driver", "path of your chrome exe");
        WebDriver driver = new ChromeDriver();
        driver.manage().window().maximize();
        driver.get("https://www.google.com");

            driver.findElement(By.xpath(".//*[@id='UserName']")).clear();
            driver.findElement(By.xpath(".//*[@id='UserName']")).sendKeys(Email);

একটি বর্ণনামূলক উত্তর যুক্ত করুন। আপনার বিবরণ প্রশ্নকর্তাকে আপনার সমাধানটি দ্রুত বুঝতে সাহায্য করবে।
নিককডার

0

বিন্দুতে সরাসরি যেতে, আপনি সহজেই xapth ব্যবহার করতে পারেন। নীচের কোডটি ব্যবহার করে এটি করার সঠিক এবং সহজ উপায়। দয়া করে চেষ্টা করুন এবং প্রতিক্রিয়া সরবরাহ করুন। ধন্যবাদ।

JavascriptExecutor js = (JavascriptExecutor) driver;

    //To click an element 
    WebElement element=driver.findElement(By.xpath(Xpath));
    js.executeScript(("arguments[0].click();", element);

    //To gettext

    String theTextIWant = (String) js.executeScript("return arguments[0].value;",driver.findElement(By.xpath("//input[@id='display-name']")));

আরও পঠন - https://medium.com/@smeesheady/webdriver-javascripttexecutor-interact-with-elements-and-open-and-handle-m Multipleple-tabs-and-get-url- dcfda49bfa0f


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