ওয়েবড্রাইভার দ্বারা ওয়েব পৃষ্ঠা সতেজকরণ যখন নির্দিষ্ট শর্তের জন্য অপেক্ষা করে


154

পরীক্ষার সময় ওয়েবপৃষ্ঠাকে রিফ্রেশ করার জন্য আমি আরও মার্জিত উপায় খুঁজছি (আমি সেলেনিয়াম 2 ব্যবহার করি)। আমি কেবল এফ 5 কী প্রেরণ করি তবে আমি ভাবছি যে পুরো ওয়েবপৃষ্ঠাকে রিফ্রেশ করার জন্য ড্রাইভারের কোনও পদ্ধতি আছে কিনা তা এখানে আমার কোড

    while(driver.findElements(By.xpath("//*[text() = 'READY']")).size() == 0 )
        driver.findElement(By.xpath("//body")).sendKeys(Keys.F5);
        //element appear after text READY is presented      
    driver.findElement(By.cssSelector("div.column a")).click();    

ম্যানুয়ালি রিফ্রেশ পৃষ্ঠায় উপাদান সন্ধানের জন্য আরও কিছু ভাল সমাধান হতে পারে

উত্তর:


294

জাভা বা জাভাস্ক্রিপ্টে:

driver.navigate().refresh();

এটি পৃষ্ঠা রিফ্রেশ করা উচিত।


ভাল লাগছে! এটা আপনাকে সাহায্য করেছে। বিকল্পভাবে আপনি যদি খাঁটি সেলেনিয়াম আরসি বা ওয়েবড্রাইভারব্যাকডসেলেনিয়াম ব্যবহার করেন তবে আপনি এটিও ব্যবহার করতে পারেন: সেলেনিয়াম.রেফ্রেশ ();
মনপ্রীত সিং

47
এটি যদিও F5 টিপানোর ঠিক সমতুল্য নয়। driver.navigate().refresh()এর অনুরোধে শিরোনামটি "নো-ক্যাশে" বলে এবং ফলস্বরূপ, নিঃশর্তভাবে সমস্ত সামগ্রী পুনরায় লোড করে। এফ 5 টি চাপার ফলে "যদি-যদি সংশোধিত-যেহেতু" অনুরোধ আসে তবে এটি "304 সংশোধিত নয়" প্রতিক্রিয়া পেতে পারে। আপনি যদি লোড টেস্টিং করেন তবে আপনাকে এই পার্থক্যটি মাথায় রাখতে হবে।
ভেসেভলড গোলভানভ

@ মনপ্রীত সমাধানের জন্য ধন্যবাদ এটি উপভোট করার যোগ্য।
আরএনএস 4'17

75

পাইথন সালে এটার জন্য উপযুক্ত পদ্ধতি থাকে: driver.refresh()। জাভাতে এটি একই রকম নাও হতে পারে।

বিকল্পভাবে, আপনি পারেন driver.get("http://foo.bar");, যদিও আমি মনে করি রিফ্রেশ পদ্ধতিটি ঠিকঠাকভাবে কাজ করা উচিত।


1
আপনি যদি ব্যবহার করছেন তবে driver.get("http://foo.bar")কেবল ব্যবহার করুনdriver.get(driver.current_url)
ম্যাট এম


21

সেলেনিয়াম ওয়েবড্রাইভার ব্যবহার করে একটি ওয়েবপৃষ্ঠাকে রিফ্রেশ করার জন্য 5 টি বিভিন্ন উপায়

কোনও বিশেষ অতিরিক্ত কোডিং নেই। আমি বিদ্যমান ফাংশনগুলি এটি কার্যকর করতে বিভিন্ন উপায়ে ব্যবহার করেছি। এখানে তারা :

  1. সেন্ডকি.কি কী পদ্ধতি ব্যবহার করে

    driver.get("https://accounts.google.com/SignUp");
    driver.findElement(By.id("firstname-placeholder")).sendKeys(Keys.F5);
    
  2. নেভিগেট.রেফ্রেশ () পদ্ধতি ব্যবহার করে

    driver.get("https://accounts.google.com/SignUp");  
    driver.navigate().refresh();
    
  3. নেভিগেট. টো () পদ্ধতি ব্যবহার করে

    driver.get("https://accounts.google.com/SignUp");  
    driver.navigate().to(driver.getCurrentUrl());
    
  4. Get () পদ্ধতিটি ব্যবহার করে

    driver.get("https://accounts.google.com/SignUp");  
    driver.get(driver.getCurrentUrl());
    
  5. সেন্ডকি () পদ্ধতি ব্যবহার করে

    driver.get("https://accounts.google.com/SignUp"); 
    driver.findElement(By.id("firstname-placeholder")).sendKeys("\uE035");
    

16

সেলেনিয়ামে অ্যাপ্লিকেশন রিফ্রেশ করার জন্য বিভিন্ন পদ্ধতির সন্ধান পেয়েছে: -

1.driver.navigate().refresh();
2.driver.get(driver.getCurrentUrl());
3.driver.navigate().to(driver.getCurrentUrl());
4.driver.findElement(By.id("Contact-us")).sendKeys(Keys.F5); 
5.driver.executeScript("history.go(0)");

লাইভ কোডের জন্য, দয়া করে লিঙ্কটি http://www.ufthelp.com/2014/11/Methods- ব্রাউজার- রিফ্রেশ- সেলেনিয়াম এইচটিএমএল দেখুন


1
নিস! এটি করার একাধিক উপায় FindElement (বাই.আইড ("যোগাযোগ-আমাদের")) কোনও ভাল উপায় নয়। আরও নির্ভরযোগ্য সর্বদা উপস্থিত উপাদানগুলি ভাল, যেমন: '/ এইচটিএমএল / বডি'। এই হার্ড রিফ্রেশ জন্য কাজ করে? এবং যদি পৃষ্ঠায় পোস্ট ডেটা থাকে তবে ফায়ারফক্স পোস্ট ডেটা ডায়ালগ দেখানোর জন্য পরিচিত।
মৃতিপালে

11

এখানে কিছুটা আলাদা সি # সংস্করণ দেওয়া হয়েছে:

driver.Navigate().Refresh();

5

পৃষ্ঠার জন্য রিফ্রেশ বিকল্প (F5)

driver.navigate().refresh();

(বা)

Actions actions = new Actions(driver);
actions.keyDown(Keys.CONTROL).sendKeys(Keys.F5).perform();

4

একটি গুরুত্বপূর্ণ বিষয় লক্ষণীয় হ'ল ড্রাইভার.নভিগেট ()। রিফ্রেশ () কলটি মাঝে মাঝে অ্যাসিনক্রোনাস মনে হয়, যার অর্থ এটি রিফ্রেশটি শেষ হওয়ার অপেক্ষা করে না, এটি কেবল "রিফ্রেশটি বন্ধ করে" এবং আরও কার্যকরকরণ অবরুদ্ধ করে না doesn't ব্রাউজারটি পৃষ্ঠাটি পুনরায় লোড করার সময়।

যদিও এটি কেবলমাত্র একটি সংখ্যালঘু ক্ষেত্রেই ঘটবে বলে মনে হচ্ছে, আমরা অনুভব করেছি যে পৃষ্ঠাটি সত্যই পুনরায় লোড করা শুরু হয়েছে কিনা তা একটি ম্যানুয়াল চেক যোগ করে এটি 100% কাজ করে তা নিশ্চিত করা আরও ভাল।

আমাদের বেস পৃষ্ঠা অবজেক্ট শ্রেণিতে তার জন্য আমি যে কোডটি লিখেছি তা এখানে:

public void reload() {
    // remember reference to current html root element
    final WebElement htmlRoot = getDriver().findElement(By.tagName("html"));

    // the refresh seems to sometimes be asynchronous, so this sometimes just kicks off the refresh,
    // but doesn't actually wait for the fresh to finish
    getDriver().navigate().refresh();

    // verify page started reloading by checking that the html root is not present anymore
    final long startTime = System.currentTimeMillis();
    final long maxLoadTime = TimeUnit.SECONDS.toMillis(getMaximumLoadTime());
    boolean startedReloading = false;
    do {
        try {
            startedReloading = !htmlRoot.isDisplayed();
        } catch (ElementNotVisibleException | StaleElementReferenceException ex) {
            startedReloading = true;
        }
    } while (!startedReloading && (System.currentTimeMillis() - startTime < maxLoadTime));

    if (!startedReloading) {
        throw new IllegalStateException("Page " + getName() + " did not start reloading in " + maxLoadTime + "ms");
    }

    // verify page finished reloading
    verify();
}

কিছু নোট:

  • যেহেতু আপনি পৃষ্ঠাটি পুনরায় লোড করছেন, আপনি কেবলমাত্র একটি নির্দিষ্ট উপাদানটির অস্তিত্ব পরীক্ষা করতে পারবেন না, কারণ পুনরায় লোড শুরুর আগে এবং এটি সম্পন্ন হওয়ার পরে উপাদানটি উপস্থিত থাকবে। তাই কখনও কখনও আপনি সত্য হয়ে উঠতে পারেন তবে পৃষ্ঠাটি এখনও লোড হওয়া শুরু করে নি।
  • পৃষ্ঠাটি পুনরায় লোড হয়ে গেলে, WebElement.isDisplayed () পরীক্ষা করা একটি স্টাইলিলেমেন্টরিফারেন্স এক্সেক্সশন ফেলে দেবে। বাকিটি কেবল সমস্ত ঘাঁটি coverাকা দেওয়ার জন্য
  • getName (): অভ্যন্তরীণ পদ্ধতি যা পৃষ্ঠার নাম পায়
  • getMaximumLoadTime (): অভ্যন্তরীণ পদ্ধতি যা কতক্ষণ পৃষ্ঠা সেকেন্ডে লোড করার অনুমতি দেওয়া উচিত তা দেয়
  • যাচাই করুন (): অভ্যন্তরীণ পদ্ধতিটি নিশ্চিত করে যে পৃষ্ঠাটি আসলে লোড হয়েছে

আবার, বেশিরভাগ ক্ষেত্রে, ডু / উইন্ড লুপটি একবারে চালায় কারণ নেভিগেটের বাইরে কোড () রিফ্রেশ করুন () ব্রাউজারটি পৃষ্ঠাটি সম্পূর্ণরূপে পুনরায় লোড না করা পর্যন্ত কার্যকর করা হয় না, তবে আমরা কেসগুলি দেখেছি যেখানে আসলে এই লুপটি পেতে কয়েক সেকেন্ড সময় লাগে কারণ নেভিগেট () ref


সত্য মূল্য সহ উত্তর ... ধন্যবাদ।
ওগমিওস


2

এমন একটি মামলা রয়েছে যখন আপনি কেবলমাত্র পৃষ্ঠায় নির্দিষ্ট আইফ্রেমটি রিফ্রেশ করতে চান এবং পুরো পৃষ্ঠাটি নয়।

আপনি নিম্নলিখিত হিসাবে:

public void refreshIFrameByJavaScriptExecutor(String iFrameId){
        String script= "document.getElementById('" + iFrameId+ "').src = " + "document.getElementById('" + iFrameId+ "').src";
       ((IJavaScriptExecutor)WebDriver).ExecuteScript(script);
}


1

জাভাতে সেলেনিয়াম ব্যবহার করে বর্তমান পৃষ্ঠাটি রিফ্রেশ করার আরেকটি উপায়।

//first: get the current URL in a String variable
String currentURL = driver.getCurrentUrl(); 
//second: call the current URL
driver.get(currentURL); 

এটি ব্যবহার করে বর্তমান পৃষ্ঠাটি রিফ্রেশ হবে যেমন ব্রাউজারের ঠিকানা বারে ক্লিক করা এবং এন্টার টিপুন।


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