跨浏览器测试 是一种功能测试,用于检查Web应用程序在不同浏览器中是否按预期工作。
为什么我们需要跨浏览器测试?
基于Web的应用程序与Windows应用程序完全不同。例如,有些人更喜欢打开 http://itxiaonv.com 在……里面 Firefox浏览器, 而其他人的可以使用 Chrome浏览器 。
在下图中,可以在 即 ,Twitter的登录框并不是每个角落都显示曲线,但我们可以在Chrome浏览器中看到它。
因此,我们需要确保Web应用程序在所有流行的浏览器中都能按预期工作,以便更多的人可以访问和使用它。
这一动机可以通过跨浏览器实现测试产品的质量。
跨浏览器问题的原因
- 不同浏览器中的字体大小不匹配。
- JavaScript实现可以不同。
- CSS、HTML验证差异可以存在。
- 某些浏览器仍然不支持HTML5。
- 页面对齐和div大小。
- 图像方向。
- 浏览器与操作系统不兼容。等。
如何执行跨浏览器测试
如果我们使用Selenium WebDriver,我们可以使用Internet Explorer、Firefox、Chrome和Safari浏览器自动执行测试用例。
为了在同一台机器上同时执行不同浏览器的测试用例,我们可以集成TestNG使用Selenium WebDriver的框架。
testing.xml将如下所示,
此testing.xml将映射到测试用例它看起来会是这样的
这里,因为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");
}
}
<?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
总结
- 跨浏览器测试是针对不同浏览器的Web应用程序进行测试的一种技术。
- Selenium可以支持不同类型的浏览器以实现自动化。
- Selenium可以与TestNG集成以执行多浏览器测试。
- 通过testing.xml中的参数,我们可以传递浏览器名称,并且在测试用例中,我们可以相应地创建WebDriver引用。
注: 该程序在Selenium 3.0.1、Chrome56.0.2924.87、Firefox47.0.2和Microsoft Edge 14.14393上进行了编译和测试。如果程序出现错误,更新驱动程序