使用Selenium WebDriver进行跨浏览器测试

跨浏览器测试 是一种功能测试,用于检查Web应用程序在不同浏览器中是否按预期工作。

Cross Browser Testing using Selenium WebDriver
Cross Browser Testing using Selenium WebDriver

为什么我们需要跨浏览器测试?

基于Web的应用程序与Windows应用程序完全不同。例如,有些人更喜欢打开 https://twitter.com 在……里面 Firefox浏览器, 而其他人的可以使用 Chrome浏览器 。

在下图中,可以在 即 ,Twitter的登录框并不是每个角落都显示曲线,但我们可以在Chrome浏览器中看到它。

Cross Browser Testing using Selenium WebDriver
Cross Browser Testing using Selenium WebDriver

因此,我们需要确保Web应用程序在所有流行的浏览器中都能按预期工作,以便更多的人可以访问和使用它。

这一动机可以通过跨浏览器实现测试产品的质量。

跨浏览器问题的原因

  1. 不同浏览器中的字体大小不匹配。
  2. JavaScript实现可以不同。
  3. CSS、HTML验证差异可以存在。
  4. 某些浏览器仍然不支持HTML5。
  5. 页面对齐和div大小。
  6. 图像方向。
  7. 浏览器与操作系统不兼容。等。

如何执行跨浏览器测试

如果我们使用Selenium WebDriver,我们可以使用Internet Explorer、Firefox、Chrome和Safari浏览器自动执行测试用例。

为了在同一台机器上同时执行不同浏览器的测试用例,我们可以集成TestNG使用Selenium WebDriver的框架。

testing.xml将如下所示,

Cross Browser Testing using Selenium WebDriver
Cross Browser Testing using Selenium WebDriver

此testing.xml将映射到测试用例它看起来会是这样的

Cross Browser Testing using Selenium WebDriver
Cross Browser Testing using Selenium WebDriver

这里,因为testing.xml有两个Test标签(‘ChromeTest’,‘FirefoxTest’),所以这个测试用例将针对两个不同的浏览器执行两次。

第一个测试“ChromeTest”会将参数“Browser”的值传递为“Chrome”,因此将执行ChromeDriver。此测试用例将在Chrome浏览器上运行。

第二个测试“FirefoxTest”将参数“Browser”的值传递为“Firefox”,因此将执行FirefoxDriver。此测试用例将在Firefox浏览器上运行。

完整代码:

Guru99CrossBrowserScript.java

package parallelTest;
import java.util.concurrent.TimeUnit;
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.edge.EdgeDriver;
import org.openqa.selenium.firefox.FirefoxDriver;
import org.testng.annotations.BeforeTest;
import org.testng.annotations.Parameters;
import org.testng.annotations.Test;
public class CrossBrowserScript {
    WebDriver driver;
    /
     * This function will execute before each Test tag in testng.xml
     * @param browser
     * @throws Exception
     */
    @BeforeTest
    @Parameters("browser")
    public void setup(String browser) throws Exception{
        //Check if parameter passed from TestNG is 'firefox'
        if(browser.equalsIgnoreCase("firefox")) {
            //create firefox instance
            System.setProperty("webdriver.gecko.driver", ".\\geckodriver.exe");
            driver = new FirefoxDriver();
        }
        //Check if parameter passed as 'chrome'
        else if(browser.equalsIgnoreCase("chrome")) {
            //set path to chromedriver.exe
            System.setProperty("webdriver.chrome.driver",".\\chromedriver.exe");
            //create chrome instance
            driver = new ChromeDriver();
        }
        //Check if parameter passed as 'Edge'
        else if(browser.equalsIgnoreCase("Edge")) {
            //set path to Edge.exe
            System.setProperty("webdriver.edge.driver",".\\MicrosoftWebDriver.exe");
            //create Edge instance
            driver = new EdgeDriver();
        } else {
            //If no browser passed throw exception
            throw new Exception("Browser is not correct");
        }
        driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);
    }
 
    @Test
    public void testParameterWithXML() throws InterruptedException{
        driver.get("http://www.itxiaonv.com/V4/");
        //Find user name
        WebElement userName = driver.findElement(By.name("uid"));
        //Fill user name
        userName.sendKeys("guru99");
        //Find password
        WebElement password = driver.findElement(By.name("password"));
        //Fill password
        password.sendKeys("guru99");
    }
}

testing.xml

<?xml version="1.0" encoding="UTF-8"?>
                             <!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd">
                             <suite name="TestSuite" thread-count="2" parallel="tests" >
                                     <test name="ChromeTest">
                                             <parameter name="browser" value="Chrome" />
                                                     <classes>
                                                     <class name="parallelTest.CrossBrowserScript">
                                                                 </class>
                                                                     </classes>
                                                                     </test>
                                                                     <test name="FirefoxTest">
                                                                             <parameter name="browser" value="Firefox" />
                                                                                     <classes>
                                                                                     <class name="parallelTest.CrossBrowserScript">
                                                                                                 </class>
                                                                                                     </classes>
                                                                                                     </test>
                                                                                                     <test name="EdgeTest">
                                                                                                             <parameter name="browser" value="Edge" />
                                                                                                                     <classes>
                                                                                                                     <class name="parallelTest.CrossBrowserScript">
                                                                                                                                 </class>
                                                                                                                                     </classes>
                                                                                                                                     </test>
                                                                                                                                     </suite>

注: 要运行测试,右键单击 testing.xml, 选择Run As(运行方式),然后单击TestNG(TestNG

Cross Browser Testing using Selenium WebDriver
Cross Browser Testing using Selenium WebDriver

总结

  1. 跨浏览器测试是针对不同浏览器的Web应用程序进行测试的一种技术。
  2. Selenium可以支持不同类型的浏览器以实现自动化。
  3. Selenium可以与TestNG集成以执行多浏览器测试。
  4. 通过testing.xml中的参数,我们可以传递浏览器名称,并且在测试用例中,我们可以相应地创建WebDriver引用。

注: 该程序在Selenium 3.0.1、Chrome56.0.2924.87、Firefox47.0.2和Microsoft Edge 14.14393上进行了编译和测试。如果程序出现错误,更新驱动程序

IT赶路人

专注IT知识分享