selenium webdriver - सेलेनियम वेबड्राइवर का उपयोग कर लॉगिन पॉप अप विंडो को कैसे संभालें?




selenium-webdriver popup (8)

सेलेनियम वेबड्राइवर का उपयोग कर लॉगिन पॉप अप विंडो को कैसे संभालें? मैंने यहां नमूना स्क्रीन संलग्न की है। मैं इस लॉगिन पॉप अप / अलर्ट विंडो में उपयोगकर्ता नाम और पासवर्ड कैसे दर्ज / इनपुट कर सकता हूं?

सादर धन्यवाद,


इसे संभालने का 1 तरीका आप यूआरएल के साथ लॉगिन विवरण प्रदान कर सकते हैं। उदाहरण के लिए यदि आपका यूआरएल " http: // localhost: 4040 " है और यह अलर्ट प्रॉम्प्ट संदेश पर "उपयोगकर्ता नाम" और "पासवर्ड" पूछ रहा है तो आप बेसुरल को " http: // उपयोगकर्ता नाम: पासवर्ड @ लोकलहोस्ट: 4040 " के रूप में पास कर सकते हैं। मुझे भरोसा है ये काम करेगा


उस URL का उपयोग करें जहां आप यूआरएल में उपयोगकर्ता नाम और पासवर्ड भेजते हैं अनुरोध:

http://username:[email protected]

तो बस इसे और स्पष्ट करने के लिए। उपयोगकर्ता नाम उपयोगकर्ता username पासवर्ड है और बाकी आपके परीक्षण वेब का सामान्य यूआरएल है

किसी भी बदलाव की आवश्यकता के बिना मेरे लिए काम करता है।

नमूना जावा कोड:

public static final String TEST_ENVIRONMENT = "the-site.com";
private WebDriver driver;

public void login(String uname, String pwd){
  String URL = "http://" + uname + ":" + pwd + "@" + TEST_ENVIRONMENT;
  driver.get(URL);
}

@Test
public void testLogin(){
   driver = new FirefoxDriver();
   login("Pavel", "UltraSecretPassword");
   //Assert...
}

निम्नलिखित सेलेनियम-वेबड्राइवर जावा कोड को चेतावनी / पॉप अप विंडो को संभालने के लिए अच्छी तरह से काम करना चाहिए:

driver.switchTo().alert();
//Selenium-WebDriver Java Code for entering Username & Password as below:
driver.findElement(By.id("userID")).sendKeys("userName");
driver.findElement(By.id("password")).sendKeys("myPassword");
driver.switchTo().alert().accept();
driver.switchTo().defaultContent();

बस अलर्ट पर स्विच करें और उपयोगकर्ता नाम और पासवर्ड सेट करने के लिए authenticateUsing का उपयोग करें और फिर मूल विंडो पर वापसी करें

Alert Windowalert = driver.switchTo().alert() ;
Windowalert.authenticateUsing(new UserAndPassword(_user_name,_password));
driver.switchTo().defaultContent() ; 

मैंने आईई का इस्तेमाल किया, फिर उस तरह का कोड बनाएं और संशोधन के बाद कई कोड काम करता है:

       public class TestIEBrowser {
                          public static void main(String[] args) throws Exception {
               //Set path of IEDriverServer.exe.
              // Note : IEDriverServer.exe should be In D: drive.
              System.setProperty("webdriver.ie.driver", "path /IEDriverServer.exe");

              // Initialize InternetExplorerDriver Instance.
              WebDriver driver = new InternetExplorerDriver();

              // Load sample calc test URL.
              driver.get("http://...  /");

              //Code to handle Basic Browser Authentication in Selenium.
              Alert aa = driver.switchTo().alert();

              Robot a = new Robot();
              aa.sendKeys("host"+"\\"+"user");  

              a.keyPress(KeyEvent.VK_TAB);
              a.keyRelease(KeyEvent.VK_TAB);
              a.keyRelease(KeyEvent.VK_ADD);                

              setClipboardData("password");

              a.keyPress(KeyEvent.VK_CONTROL);
              a.keyPress(KeyEvent.VK_V);
              a.keyRelease(KeyEvent.VK_V);
              a.keyRelease(KeyEvent.VK_CONTROL);
              //Thread.sleep(5000);
              aa.accept();        




    }

             private static void setClipboardData(String string) {
            // TODO Auto-generated method stub
                        StringSelection stringSelection = new StringSelection(string);                            Toolkit.getDefaultToolkit().getSystemClipboard().setContents(stringSelection, null);
        }
}

यह WebDriver 3.0 में बहुत आसान है (अभी तक यह बीटा में है)।

Alert alert = driver.switchTo().alert() ;
alert.authenticateUsing(new UserAndPassword(_user_name,_password));
driver.switchTo().defaultContent() ; 

उम्मीद है कि यह मदद करता है।


लॉगिन पॉपअप को संभालने के लिए आप इस ऑटोिट स्क्रिप्ट का उपयोग कर सकते हैं:

WinWaitActive("Authentication Required","","10")
If WinExists("Authentication Required") Then
Send("username{TAB}")
Send("Password{Enter}")
EndIf'

समाधान: थ्रेड और रोबोट का उपयोग कर विंडोज सक्रिय निर्देशिका प्रमाणीकरण

मैंने हमारी वेबसाइट की विंडोज सक्रिय निर्देशिका प्रमाणीकरण प्रक्रिया स्वचालित करने के लिए सेलेनियम वेबड्राइवर के साथ जावा थ्रेड और रोबोट का उपयोग किया। यह तर्क फ़ायरफ़ॉक्स और क्रोम में ठीक काम करता है लेकिन यह आईई में काम नहीं करता है। किसी कारण से IE प्रमाणीकरण विंडो पॉप अप होने पर वेबड्राइवर को मारता है जबकि क्रोम और फ़ायरफ़ॉक्स वेब ड्राइवर को मारने से रोकता है। मैंने सफारी जैसे अन्य वेब ब्राउज़र में कोशिश नहीं की।

//...
//Note: this logic works in Chrome and Firefox. It did not work in IE and I did not try Safari.
//...

//import relevant packages here

public class TestDemo {

    static WebDriver driver;

    public static void main(String[] args) {

        //setup web driver
        System.setProperty("webdriver.chrome.driver", "path to your chromedriver.exe");
        driver = new ChromeDriver();

        //create new thread for interaction with windows authentication window
        (new Thread(new LoginWindow())).start();                

        //open your url. this will prompt you for windows authentication
        driver.get("your url");

        //add test scripts below ...
        driver.findElement(By.linkText("Home")).click();    
        //.....
        //.....
    }

    //inner class for Login thread    
    public class LoginWindow implements Runnable {

        @Override
        public void run() {
            try {
                login();
            } catch (Exception ex) {
                System.out.println("Error in Login Thread: " + ex.getMessage());
            }
        }

        public void login() throws Exception {

            //wait - increase this wait period if required
            Thread.sleep(5000);

            //create robot for keyboard operations
            Robot rb = new Robot();

            //Enter user name by ctrl-v
            StringSelection username = new StringSelection("username");
            Toolkit.getDefaultToolkit().getSystemClipboard().setContents(username, null);            
            rb.keyPress(KeyEvent.VK_CONTROL);
            rb.keyPress(KeyEvent.VK_V);
            rb.keyRelease(KeyEvent.VK_V);
            rb.keyRelease(KeyEvent.VK_CONTROL);

            //tab to password entry field
            rb.keyPress(KeyEvent.VK_TAB);
            rb.keyRelease(KeyEvent.VK_TAB);
            Thread.sleep(2000);

            //Enter password by ctrl-v
            StringSelection pwd = new StringSelection("password");
            Toolkit.getDefaultToolkit().getSystemClipboard().setContents(pwd, null);
            rb.keyPress(KeyEvent.VK_CONTROL);
            rb.keyPress(KeyEvent.VK_V);
            rb.keyRelease(KeyEvent.VK_V);
            rb.keyRelease(KeyEvent.VK_CONTROL);

            //press enter
            rb.keyPress(KeyEvent.VK_ENTER);
            rb.keyRelease(KeyEvent.VK_ENTER);

            //wait
            Thread.sleep(5000);
        }                        
    }      
}






alert