সেলেনিয়াম ওয়েব ড্রাইভার এবং জাভা। উপাদানটি বিন্দুতে ক্লিকযোগ্য নয় (x, y)। অন্যান্য উপাদান ক্লিক পাবেন


91

আমি স্পষ্টভাবে অপেক্ষা করেছি এবং আমার এই সতর্কতা রয়েছে:

org.openqa.selenium.WebDriverException: এলিমেন্টটি পয়েন্টে ক্লিকযোগ্য নয় (36, 72)। অন্যান্য উপাদান ক্লিক পেতে পারে: ... কমান্ড সময়কাল বা সময়সীমা: 393 মিলিসেকেন্ড

আমি যদি ব্যবহার Thread.sleep(2000)করি তবে আমি কোনও সতর্কতা গ্রহণ করি না।

@Test(dataProvider = "menuData")
public void Main(String btnMenu, String TitleResultPage, String Text) throws InterruptedException {
    WebDriverWait wait = new WebDriverWait(driver, 10);
    driver.findElement(By.id("navigationPageButton")).click();

    try {
       wait.until(ExpectedConditions.elementToBeClickable(By.cssSelector(btnMenu)));
    } catch (Exception e) {
        System.out.println("Oh");
    }
    driver.findElement(By.cssSelector(btnMenu)).click();
    Assert.assertEquals(driver.findElement(By.cssSelector(TitleResultPage)).getText(), Text);
}

আপনি কি ক্রোম সংস্করণ ব্যবহার করছেন 61+?
demouser123

@ demouser123 আমি ফায়ারফক্স 47.0.1 এবং সেলেনিয়াম ওয়েবড্রাইভার 2.51.0 ব্যবহার করছি
মারিয়া

@ মারিয়া কোন লাইনে ত্রুটি পাচ্ছেন? ধন্যবাদ
দেবানজানবি

@ দেবেনজানবি লাইনে: ড্রাইভার.ফাইন্ডএলিমেন্ট (বাই.আইডি ("নেভিগেশনপেজবটন")) ক্লিক করুন ();
মারিয়া

ত্রুটির অর্থ হল, লক্ষ্য উপাদানটির উপরে ওভারলাইং করার আরও একটি উপাদান রয়েছে (স্থির / পরম অবস্থানযুক্ত ওভারলে) বা জেড-সূচকটি খুব কম। এটি রূপান্তরগুলি ব্যবহার করে হোভার এফেক্টের কারণে হতে পারে (সর্বনিম্ন সময়সীমার চেয়ে ধীর, এই ক্ষেত্রে 393 মিমি)। আপনার #navigationPageButtonদৃশ্যমান হয়ে ওঠার জন্য অপেক্ষা করা উচিত (বা elementToBeClickable()সেই উপাদানটির জন্য ব্যবহারযোগ্য ক্লিকযোগ্য ) বা সমস্ত পূর্বশর্তগুলি পূরণ হয়েছে কিনা তা যাচাই করা উচিত যাতে বোতামটি ক্লিকযোগ্য।
অবশেষে

উত্তর:


192

ওয়েবড্রাইভার এক্সসেপশন: এলিমেন্টটি বিন্দুতে ক্লিকযোগ্য নয় (x, y)

এটি একটি টিপিক্যাল হয় org.openqa.selenium.WebDriverException যা প্রসারিত java.lang.RuntimeException

এই ব্যতিক্রম ক্ষেত্রগুলি হ'ল:


আপনার পৃথক ব্যবহারের ক্ষেত্রে, ত্রুটিটি সব বলে:

WebDriverException: Element is not clickable at point (x, y). Other element would receive the click 

এটা তোলে আপনার কোড ব্লক থেকে স্পষ্ট যে আপনি সংজ্ঞায়িত আছে waitযেমন WebDriverWait wait = new WebDriverWait(driver, 10);কিন্তু আপনি আহ্বান করা হয় click()উপাদান পদ্ধতি সামনে ExplicitWaitহিসেবে খেলার মধ্যে আসে until(ExpectedConditions.elementToBeClickable)

সমাধান

ত্রুটি Element is not clickable at point (x, y)বিভিন্ন কারণ থেকে উদ্ভূত হতে পারে। আপনি নিম্নলিখিত পদ্ধতির যে কোনও একটি দ্বারা তাদের সম্বোধন করতে পারেন:

1. জাভাস্ক্রিপ্ট বা এজেএক্স কল উপস্থিত থাকার কারণে এলিমেন্ট ক্লিক হচ্ছে না

Actionsক্লাস ব্যবহার করার চেষ্টা করুন :

WebElement element = driver.findElement(By.id("navigationPageButton"));
Actions actions = new Actions(driver);
actions.moveToElement(element).click().build().perform();

2. উপাদানটি ভিউপোর্টের মধ্যে না হওয়ায় ক্লিক করা হচ্ছে না

JavascriptExecutorভিউপোর্টের মধ্যে উপাদান আনতে ব্যবহার করার চেষ্টা করুন :

WebElement myelement = driver.findElement(By.id("navigationPageButton"));
JavascriptExecutor jse2 = (JavascriptExecutor)driver;
jse2.executeScript("arguments[0].scrollIntoView()", myelement); 

৩. উপাদানটি ক্লিকযোগ্য হওয়ার আগে পৃষ্ঠাটি সতেজ হয়ে উঠছে।

এই ক্ষেত্রে প্রবৃত্ত ExplicitWait অর্থাত WebDriverWait যেমন বিন্দু 4 উল্লেখ করেছে।

৪) এলিমেন্টটি ডিওমে উপস্থিত রয়েছে তবে ক্লিকযোগ্য নয়।

এক্ষেত্রে উপাদানটি ক্লিকযোগ্য হতে পারে তার জন্য সেট দিয়ে এক্সপ্রেসওয়াইট প্ররোচিত করুন :ExpectedConditionselementToBeClickable

WebDriverWait wait2 = new WebDriverWait(driver, 10);
wait2.until(ExpectedConditions.elementToBeClickable(By.id("navigationPageButton")));

5. উপাদান উপস্থিত কিন্তু অস্থায়ী ওভারলে রয়েছে।

এই ক্ষেত্রে, ওভারলে অদৃশ্য হওয়ার জন্য সেট ExplicitWaitদিয়ে প্ররোচিত করুন ।ExpectedConditionsinvisibilityOfElementLocated

WebDriverWait wait3 = new WebDriverWait(driver, 10);
wait3.until(ExpectedConditions.invisibilityOfElementLocated(By.xpath("ele_to_inv")));

E. এলিমেন্ট উপস্থিত রয়েছে তবে স্থায়ীভাবে ওভারলে রয়েছে।

JavascriptExecutorক্লিক করে সরাসরি উপাদানটিতে পাঠাতে ব্যবহার করুন।

WebElement ele = driver.findElement(By.xpath("element_xpath"));
JavascriptExecutor executor = (JavascriptExecutor)driver;
executor.executeScript("arguments[0].click();", ele);

4
উপরে # 6 / # 2- তে:। এক্সেকিউটস্ক্রিপ্ট পদ্ধতিটি এখন জাভাস্ক্রিপ্টএকসিকিউটারের পরিবর্তে ওয়েব ড্রাইভার থেকেই অ্যাক্সেসযোগ্য। উত্তম লিখিত উত্তরের জন্য ধন্যবাদ!
তাব্রোক

6
আপনি অনেকগুলি সম্ভাবনা কভার করেছেন যার মধ্যে উল্লেখ করা ত্রুটিটি পরিচালনা করার জন্য কেবল 5 এবং 6 সঠিক উপায়। প্রথম চারটি পৃথক ত্রুটি ছুঁড়েছে যার জন্য আপনি যে সমাধানটি দিয়েছেন তা কার্যকর হবে না। উদাহরণস্বরূপ 3 নম্বর পয়েন্টটি আসলে একটি বাসি উপাদান সমস্যা যা আপনি এলিমেন্টটোবে ক্লিকযোগ্য পদ্ধতিতে আর কতক্ষণ অপেক্ষা করলেও কাজ করবে না। সেটিকে অন্যভাবে পরিচালনা করতে হবে।
রাজাগোপালান

6 সত্যই এটি সঠিক নয়; সমস্যাটি নিয়ে কাজ করতে হ্যাক করুন, সঠিক প্রত্যাশিত শর্তটি ব্যবহার করা হলে 5 টি সঠিক হত 5 4 দেখতে একমাত্র সঠিক উত্তরের মতো।
আর্দেসকো

4
একটি গুরুত্বপূর্ণ বিষয় লক্ষণীয়, যখন আমরা ব্যবহারকারীর ক্রিয়াকলাপগুলি অনুকরণ করি তখন যে কোনও উপাদান ক্লিক করা যায় না তার জন্য জাভাস্ক্রিপ্ট ব্যবহার করা খুব অবাঞ্ছিত হতে পারে (# 6)। শেষ ব্যবহারকারী কখনই তা করবে না, এটিকে ভিউপোর্টে আনার জন্য তারা কেবলমাত্র উপাদানটিতে স্ক্রোল করবে বা এর সাথে ইন্টারঅ্যাক্ট করার জন্য কোনও ওভারলে (যদি পৃষ্ঠা দ্বারা অনুমোদিত হয়) বরখাস্ত করবে।
পি_চ্যাম্প

17

জাভাস্ক্রিপ্ট সহ আপনার এটি ব্যবহার করা দরকার

ক্লিক অপারেশন অনুকরণ করতে আমরা আর্গুমেন্ট [0] .ক্লিক () ক্লিক করতে পারি।

var element = element(by.linkText('webdriverjs'));
browser.executeScript("arguments[0].click()",element);

কাজ! এটি কীভাবে কাজ করে তা আমি কল্পনা করতে পারি না, তবে অন্যথায় এটি ওভারলে স্তরটিতে ক্লিক করে ('অদৃশ্যতা অফিমেন্টলোকটেড' দ্বারা ওভারলে বন্ধ হওয়ার অপেক্ষায় প্রায় 30 সেকেন্ড লাগে))
ফিজ্ক

আমি যেহেতু জাভাতে লিখি এবং পুরো যুদ্ধটি নয়, আপনি কি দয়া করে পুরো ব্যাখ্যাটি লিখতে পারেন, আপনি কি দয়া করে পুরো প্রবাহ সরবরাহ করতে পারেন?
বাস্তিয়ান

4

কিছু উপাদান ক্লিক করার চেষ্টা করার সময় আমি এই ত্রুটির মধ্যে দৌড়েছি (বা এর ওভারলেটি, আমি যত্ন করি নি), এবং অন্যান্য উত্তরগুলি আমার পক্ষে কার্যকর হয়নি। আমি elementFromPointতার পরিবর্তে সেলেনিয়াম যে উপাদানটি ক্লিক করতে চেয়েছিলাম সে উপাদানটি খুঁজতে DOM এপিআই ব্যবহার করে এটি ঠিক করেছি :

element_i_care_about = something()
loc = element_i_care_about.location
element_to_click = driver.execute_script(
    "return document.elementFromPoint(arguments[0], arguments[1]);",
    loc['x'],
    loc['y'])
element_to_click.click()

আমারও এমন পরিস্থিতি হয়েছিল যেখানে একটি উপাদান চলছিল , উদাহরণস্বরূপ কারণ পৃষ্ঠায় এটির উপরে একটি উপাদান একটি অ্যানিমেটেড প্রসারিত বা পতন করছে। সেক্ষেত্রে এই প্রত্যাশিত শর্ত শ্রেণি সহায়তা করেছিল। আপনি এটিকে অ্যানিমেটেড উপাদানগুলি দিয়েছেন , আপনি ক্লিক করতে চান এমনগুলি নয়। এই সংস্করণটি কেবল jQuery অ্যানিমেশনগুলির জন্য কাজ করে।

class elements_not_to_be_animated(object):
    def __init__(self, locator):
        self.locator = locator

    def __call__(self, driver):
        try:
            elements = EC._find_elements(driver, self.locator)
            # :animated is an artificial jQuery selector for things that are
            # currently animated by jQuery.
            return driver.execute_script(
                'return !jQuery(arguments[0]).filter(":animated").length;',
                elements)
        except StaleElementReferenceException:
            return False

2

আপনি চেষ্টা করতে পারেন

WebElement navigationPageButton = (new WebDriverWait(driver, 10))
 .until(ExpectedConditions.presenceOfElementLocated(By.id("navigationPageButton")));
navigationPageButton.click();

এটা আমার সাহায্য না।
মারিয়া

হ্যাঁ: org.openqa.selenium.WebDriverException: এলিমেন্টটি বিন্দুতে ক্লিকযোগ্য নয় (36, 72)। অন্যান্য উপাদান ক্লিকটি পাবেন: <div tabindex = "0" শ্রেণি = "ওয়েটার-ইউআই-লক"> </div> কমান্ড সময়কাল বা সময়সীমা: 70 মিলিসেকেন্ড
মারিয়া

4
নিম্নলিখিত চেষ্টা করুনWebElement element = driver.findElement(By.id("navigationPageButton")); Actions actions = new Actions(driver); actions.moveToElement(element).click().perform();
fg78nc

এটিও সাহায্য নয়। আমার দুটি ব্যাতিক্রম এবং একটি অ্যাসেরশন এরির এবং এর পরে কিছু ত্রুটি "এলিমেন্ট পয়েন্টে ক্লিকযোগ্য নয়"
মারিয়া

4
আমি যদি থ্রেড.স্লিপ ব্যবহার করি তবে সমস্ত কাজ। তবে আমি অপেক্ষা করি সমস্ত ব্যর্থ।
মারিয়া

2

ব্যতিক্রমটিতে উল্লিখিত বিন্দু অনুসারে পৃষ্ঠাটি স্ক্রোল করা আমার পক্ষে কৌশলটি করেছে। নীচে কোড স্নিপেট রয়েছে:

$wd_host = 'http://localhost:4444/wd/hub';
$capabilities =
    [
        \WebDriverCapabilityType::BROWSER_NAME => 'chrome',
        \WebDriverCapabilityType::PROXY => [
            'proxyType' => 'manual',
            'httpProxy' => PROXY_DOMAIN.':'.PROXY_PORT,
            'sslProxy' => PROXY_DOMAIN.':'.PROXY_PORT,
            'noProxy' =>  PROXY_EXCEPTION // to run locally
        ],
    ];
$webDriver = \RemoteWebDriver::create($wd_host, $capabilities, 250000, 250000);
...........
...........
// Wait for 3 seconds
$webDriver->wait(3);
// Scrolls the page vertically by 70 pixels 
$webDriver->executeScript("window.scrollTo(0, 70);");

দ্রষ্টব্য: আমি ফেসবুক পিএইচপি ওয়েবড্রাইভার ব্যবহার করি


0

ক্লিকের কার্যকারিতা ওভাররাইড করা সবচেয়ে ভাল সমাধান:

public void _click(WebElement element){
    boolean flag = false;
    while(true) {
        try{
            element.click();
            flag=true;
        }
        catch (Exception e){
            flag = false;
        }
        if(flag)
        {
            try{
                element.click();
            }
            catch (Exception e){
                System.out.printf("Element: " +element+ " has beed clicked, Selenium exception triggered: " + e.getMessage());
            }
            break;
        }
    }
}

0

সি # তে আমার চেক করতে সমস্যা হয়েছিল RadioButtonএবং এটি আমার পক্ষে কাজ করেছে:

driver.ExecuteJavaScript("arguments[0].checked=true", radio);

0

নীচের কোড দিয়ে চেষ্টা করতে পারেন

 WebDriverWait wait = new WebDriverWait(driver, 30);

অন্যান্য উপাদান পাস পেতে ক্লিক পাবেন :<a class="navbar-brand" href="#"></a>

    boolean invisiable = wait.until(ExpectedConditions
            .invisibilityOfElementLocated(By.xpath("//div[@class='navbar-brand']")));

নীচে প্রদর্শিত হিসাবে ক্লিকযোগ্য বাটন আইডি পাস করুন

    if (invisiable) {
        WebElement ele = driver.findElement(By.xpath("//div[@id='button']");
        ele.click();
    }
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.