使用跨浏览器测试 Selenium 网络驱动程序
使用跨浏览器测试 Selenium
跨浏览器测试 是一种功能测试,用于检查您的 Web 应用程序是否在不同的浏览器中按预期运行。
为什么我们需要跨浏览器测试?
基于 Web 的应用程序与 Windows 应用程序。最终用户可以在任何浏览器中打开 Web 应用程序。例如,有些人更喜欢打开 https://twitter.com in Firefox 浏览器, 而其他人可以使用 Chrome浏览器 or IE.
在下图中,你可以观察到 IE,Twitter的登录框并没有呈现出四角弯曲的现象,但是在Chrome浏览器中我们可以看到。
因此,我们需要确保 Web 应用程序能够在所有流行的浏览器中正常运行,以便更多人可以访问和使用它。
这个动机可以通过跨浏览器来实现 测试与验证 该产品。
跨浏览器问题的原因
- 不同浏览器中的字体大小不匹配。
- Java脚本实现可以有所不同。
- CSS、HTML 验证可能存在差异。
- 一些浏览器仍然不支持 HTML5。
- 页面对齐和 div 大小。
- 图像方向。
- 浏览器与操作系统不兼容。等等。
如何进行跨浏览器测试
如果我们正在使用 Selenium WebDriver,我们可以使用 Internet Explorer、FireFox、Chrome、Safari 浏览器。
为了在同一台机器上同时使用不同的浏览器执行测试用例,我们可以集成 TestNG 框架与 Selenium WebDriver。
你的 testing.xml 看起来会像这样,
此 testing.xml 将与 测试用例 看起来就像这样
这里因为 testing.xml 有两个测试标签('ChromeTest'、'FirefoxTest'),这个测试用例会针对2个不同的浏览器执行两次。
第一个测试“ChromeTest”将传递参数“browser”的值作为“chrome”,因此将执行 ChromeDriver。此测试用例将在 Chrome 浏览器上运行。
第二次测试Firefox测试’将传递参数‘浏览器’的值作为’Firefox' 所以 Firefox驱动程序将被执行。此测试用例将在 Fire 上运行Fox 浏览器。
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");
}
}
测试.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>
注意: 要运行测试,请右键单击 测试.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. 如果程序出现错误,请更新驱动程序





