使用跨浏览器测试 Selenium 网络驱动程序
⚡ 智能摘要
使用跨浏览器测试 Selenium WebDriver 会验证 Web 应用程序在 Chrome 浏览器上的行为是否一致。 Firefox本教程演示如何将 Safari 和 Edge 浏览器结合起来使用。 Selenium WebDriver 具有 TestNG 启动并行会话,验证渲染,并扩展覆盖范围,使其跨越现代桌面和移动浏览器。

为什么我们需要跨浏览器测试?
基于 Web 的应用程序与原生桌面应用程序截然不同。最终用户可以在任何浏览器中打开 Web 应用程序。例如,有些人更喜欢打开…… https://twitter.com in Firefox,而其他人使用 铬系列, Safari 或 Microsoft Edge.
从下图可以看出,在旧版浏览器中,Twitter 的登录框无法正确渲染圆角,而现代 Chrome 浏览器则能按设计渲染圆角。
因此,我们需要确保该网络应用程序在所有主流浏览器中都能按预期运行,以便更多的人可以访问和使用它。
跨浏览器兼容性可以实现这一目标。 测试与验证 该产品可在所有适用浏览器上运行。
跨浏览器兼容性问题的原因
- 不同浏览器中的字体大小不匹配。
- JavaChrome(V8)的脚本引擎实现方式各不相同, Firefox (蜘蛛猴),Safari(JavaScriptCore),以及 Edge。
- CSS 和 HTML 验证差异,包括供应商前缀处理。
- 旧版本浏览器对 HTML5 和 ECMAScript 功能的支持不一致或不完整。
- 页面对齐方式、div尺寸以及flexbox或网格渲染方式的变化。
- 图像方向和色彩配置文件差异。
- 浏览器与底层操作系统不兼容,包括移动端 WebView 的一些怪异之处 Android 和iOS。
如何进行跨浏览器测试
如果我们正在使用 Selenium 借助 WebDriver,我们可以自动化针对 Chrome 的测试用例。 Firefox, Microsoft Edge以及 Safari 浏览器。
为了在同一台机器上同时使用不同的浏览器执行测试用例,我们可以集成 TestNG 框架与 Selenium WebDriver。为了获得更广泛的操作系统和版本覆盖范围,可以通过远程 WebDriver 端点将同一测试套件指向 Sauce Labs、BrowserStack 或 LambdaTest 等云网格。
您的 testing.xml 文件内容将如下所示:
此 testing.xml 将与 测试用例 看起来是这样的:
因为 testing.xml 中有多个 Test 标签('ChromeTest','Firefox'Test', 'EdgeTest'),此测试用例将对每个浏览器执行一次。
第一个测试用例“ChromeTest”会将参数“browser”的值设置为“chrome”,因此会执行ChromeDriver。此测试用例将在Chrome浏览器上运行。
第二次测试Firefox测试’将传递参数‘浏览器’的值作为’Firefox', 所以 Firefox驱动程序将执行。此测试用例将在以下平台上运行: Firefox 浏览器。添加 Edge 或 Safari 测试也遵循相同的模式。
Guru99CrossBrowserScript.java
完成: Code:
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.openqa.selenium.safari.SafariDriver; 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 msedgedriver.exe System.setProperty("webdriver.edge.driver",".\\msedgedriver.exe"); //create Edge instance driver = new EdgeDriver(); } //Check if parameter passed as 'Safari' else if(browser.equalsIgnoreCase("Safari")){ //SafariDriver ships with macOS, no driver path needed driver = new SafariDriver(); } 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"); } }
测试.xml
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd"> <suite name="TestSuite" thread-count="3" 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>
注意: 要运行测试,请右键单击 测试.xml选择“运行方式”,然后单击 TestNG 套房。
利用云浏览器网格进行扩展
运行 Selenium WebDriver 在本地仅支持两到三种浏览器,但实际用户会使用数百种操作系统和浏览器组合访问网站。例如,云实验室就可能出现这种情况。 酱料实验室, BrowserStack和 LambdaTest 公开远程 WebDriver 端点。指向同一端点。 Selenium 在网格上进行测试,通过浏览器、版本、操作系统和分辨率所需的功能,并且该套件可以水平扩展而无需管理本地驱动程序。
现代网格还展示了人工智能辅助功能,例如视觉回归差异、自愈元素定位器和不稳定性评分,从而降低了长期运行的跨浏览器测试套件的维护开销。
注意: 该程序已构建并测试完毕。 Selenium 4、Chrome浏览器 Firefox和 Microsoft Edge如果程序报错,请更新驱动程序二进制文件以匹配您安装的浏览器版本,或使用 Selenium 能够自动解析驱动程序的管理器。




