如何使用无头浏览器处理警报(HtmlUnitDriver / Phantomjs驱动程序)

时间:2017-12-06 08:49:35

标签: java selenium phantomjs testng

我正在使用PhantomJs驱动程序进行无头测试,我正处于异常

之下

示例代码:

import static org.testng.Assert.assertEquals;
import org.openqa.selenium.Alert;
import org.openqa.selenium.By;
import org.openqa.selenium.Capabilities;
import org.openqa.selenium.NoAlertPresentException;
import org.openqa.selenium.UnexpectedAlertBehaviour;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.phantomjs.PhantomJSDriver;
import org.openqa.selenium.remote.CapabilityType;
import org.openqa.selenium.remote.DesiredCapabilities;
import org.testng.annotations.AfterMethod;
import org.testng.annotations.BeforeMethod;
import org.testng.annotations.Test;



public class TestLogin {    
WebDriver d;
@BeforeMethod
    public void launh_Browser() {
System.setProperty("phantomjs.binary.path", "D:\\Selenium\\driver\\phantomjs-2.1.1-windows\\bin\\phantomjs.exe");
         Capabilities caps = new DesiredCapabilities();
         ((DesiredCapabilities) caps).setJavascriptEnabled(true);                
         ((DesiredCapabilities) caps).setCapability("takesScreenshot", true);     
         d=new PhantomJSDriver(caps);
    }
    @Test
    public void guru_banking_login_excel() throws Exception {
        d.get("http://www.demo.guru99.com/V4/");
        d.findElement(By.name("uid")).sendKeys("TestUser");
        d.findElement(By.name("password")).sendKeys("testpwd");
        d.findElement(By.name("btnLogin")).click();
        try{ 
            Alert alt = d.switchTo().alert();
            String actualBoxMsg = alt.getText(); // get content of the Alter Message
            assertEquals(actualBoxMsg,"User or Password is not valid");
            alt.accept();          
        }
        catch (NoAlertPresentException Ex){ 
            String hometitle=d.getTitle();
            assertEquals(hometitle,"Guru99 Bank Manager HomePage");
  }   
d.quit
}

观察到错误:

 Exception : org.openqa.selenium.UnsupportedCommandException: Invalid Command Method - {"headers":{"Accept-Encoding":"gzip,deflate","Cache-Control":"no-cache","Connection":"Keep-Alive","

我正在尝试使用phantomjs作为驱动程序来处理弹出窗口  请帮助这.........

先谢谢.. !!!!

1 个答案:

答案 0 :(得分:0)

你必须在代码中处理很多要点:

  1. 在您提及 PhantomJS 时使用 System.setProperty 时,请使用以下代码行:

    File src = new File("C:\\Utility\\phantomjs-2.1.1-windows\\bin\\phantomjs.exe");
    System.setProperty("phantomjs.binary.path", src.getAbsolutePath());
    
  2. DesiredCapabilities 对象类型必须仅参考 DesiredCapabilities 类启动。所以改为:

    DesiredCapabilities caps = new DesiredCapabilities();
    
  3. 使用 assertEquals 时,请使用 Assert.assertEquals ,如下所示:

    Assert.assertEquals(actualBoxMsg,"User or Password is not valid");
    //
    Assert.assertEquals(hometitle,"Guru99 Bank Manager HomePage");
    
  4. 当您使用 TestNG 时,对于 Assert ,请使用 org.testng.Assert; 而不是 static org.testng.Assert.assertEquals; 作为导入:

    import org.testng.Assert;
    
  5. 您需要在单独的 d.quit() 功能中包含 TestNG Annotated 一行,如下所示:

        @AfterMethod
        public void tearDown() {
            d.quit();
        }
    
  6. 以下是您自己的代码块,可以成功执行:

    package headlessBrowserTesting;
    
    import java.io.File;
    
    import org.openqa.selenium.Alert;
    import org.openqa.selenium.By;
    import org.openqa.selenium.NoAlertPresentException;
    import org.openqa.selenium.WebDriver;
    import org.openqa.selenium.phantomjs.PhantomJSDriver;
    import org.openqa.selenium.remote.DesiredCapabilities;
    import org.testng.Assert;
    import org.testng.annotations.AfterMethod;
    import org.testng.annotations.BeforeMethod;
    import org.testng.annotations.Test;
    
    public class PhantomJS_webdriver_binary 
    {
    
        WebDriver d;
    
        @BeforeMethod
        public void launh_Browser() {
            File src = new File("C:\\Utility\\phantomjs-2.1.1-windows\\bin\\phantomjs.exe");
            System.setProperty("phantomjs.binary.path", src.getAbsolutePath());
            DesiredCapabilities caps = new DesiredCapabilities();
            ((DesiredCapabilities) caps).setJavascriptEnabled(true);                
            ((DesiredCapabilities) caps).setCapability("takesScreenshot", true);     
            d=new PhantomJSDriver(caps);
          }
    
        @Test
        public void guru_banking_login_excel() throws Exception {
            d.get("http://www.demo.guru99.com/V4/");
            d.findElement(By.name("uid")).sendKeys("TestUser");
            d.findElement(By.name("password")).sendKeys("testpwd");
            d.findElement(By.name("btnLogin")).click();
            try{ 
                Alert alt = d.switchTo().alert();
                String actualBoxMsg = alt.getText();
                Assert.assertEquals(actualBoxMsg,"User or Password is not valid");
                alt.accept();          
            }
            catch (NoAlertPresentException Ex){ 
                String hometitle=d.getTitle();
                Assert.assertEquals(hometitle,"Guru99 Bank Manager HomePage");
            }  
        }
    
        @AfterMethod
        public void tearDown() {
            d.quit();
        }
    
    }