使用 Selenium WebDriver 进行跨浏览器测试
使用 Selenium 进行跨浏览器测试
跨浏览器测试是一种功能测试,用于检查您的 Web 应用程序在不同浏览器中是否按预期工作。
为什么我们需要跨浏览器测试?
基于 Web 的应用程序与 Windows 应用程序完全不同。最终用户可以在任何浏览器中打开 Web 应用程序。例如,有些人喜欢在 Firefox 浏览器中打开 https://twitter.com,而另一些人可能正在使用 Chrome 浏览器或 IE。
在下图中,您可以看到在 IE 中,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'),此测试用例将针对 2 个不同的浏览器执行两次。
第一个测试“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("https://demo.guru99.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,选择“运行方式”,然后单击“TestNG”。
摘要
- 跨浏览器测试是一种使用不同 Web 浏览器测试 Web 应用程序的技术。
- Selenium 可以支持不同类型的跨浏览器测试工具进行自动化。
- Selenium 可以与 TestNG 集成以执行多浏览器测试。
- 我们可以从 testing.xml 中的参数传递浏览器名称,并在测试用例中相应地创建 WebDriver 引用。
注意:给定的程序在 Selenium 3.0.1、Chrome 56.0.2924.87、Firefox 47.0.2 和 Microsoft Edge 14.14393 上构建和测试。如果程序出现错误,请更新驱动程序。