10I 高级 WebDriver – 使用属性文件

    嗨呀冠军! 欢迎回到另一篇有趣的文章,它告诉您为什么属性文件首先存在! 这个特定的概念不仅限于 Selenium WebDriver 项目。 它基本上可以用于任何涉及硬编码内容的 Java 项目中。

    假设您有数百个自动化测试用例,并且在每个测试用例中,您都对要测试的应用的 URL 进行了硬编码。 到目前为止,一切都很好。 但是,如果弹出另一个版本,将应用 URL 更改为另一个版本,并且要再次执行相同的测试用例(回归测试),该怎么办? 您可能会想,“那很简单! 我只需要再运行一次构建文件。 只需单击一下,我就可以玩超级马里奥了!”。 您是否错过了 URL 部分? 手动转到每个测试用例并编辑硬编码的 URL 以使其正常工作又会带来多大的痛苦呢? 不好了!!!

    别担心! 我们有一个解决方案。 财产文件将为我们提供帮助! 为了使您的测试用例更加动态,请确保不要在其中放入任何硬编码的值。 将这些值抽象到属性文件中,以便每当它们更改时,您都可以在一个位置进行编辑,并且测试用例可以再次完美地工作。

    事不宜迟,让我们仅通过三个小步骤就可以了解如何在我们的项目中实现此目标,

    右键单击项目->新建->包。 确保“源文件夹”显示您的项目名称,并将包名称设为“资源”。

    现在,右键单击“资源包->新建->文件”。 让文件名是“”。

    现在是时候从测试用例中提取所有这些硬编码的值了。

    property file

    为了在测试案例中使用这些属性,

    Properties props = new Properties();

    声明“属性”类型的“属性”变量。 这将创建一个没有默认值的空属性列表。

    这需要从java.util包导入import java.util.Properties;

    FileInputStream fis = new FileInputStream("resources//config.properties");

    创建一个连接以从“resources”包下的“config.properties”文件中读取所有属性。

    这也需要从java.io包中导入import java.io.FileInputStream;

    props.getProperty("baseURL"); – 要获取特定属性的值,请使用“getProperty”方法。 将在双引号中提及相应的键作为 getProperty()方法的参数。 它使用属性列表中的指定键搜索属性。 如果找不到键,则返回null

    让我们看一个测试案例,实现到目前为止所涵盖的概念,

    1. 打开 Firefox 浏览器。
    2. 从属性文件中读取 firefox 驱动程序路径和基本 URL。
    3. 导航到
    4. 按名称找到“三轮车”复选框,然后将相应的消息打印到控制台
    5. 检查“三轮车”复选框是否已启用,并将相应消息打印到控制台
    6. 根据“货车”和“SUV”复选框的当前选择状态,选中或取消选中并打印执行click()动作前后的状态
    7. 使用 XPath 找到“轿车”复选框
    8. 使用两次迭代在选择状态和取消选择状态之间切换
    9. 使用cssSelector找到“杂志”单选按钮
    10. 检查是否默认选中
    11. 如果是,则将相应消息打印到控制台,如果否,请选择单选按钮

    验证 Eclipse IDE 控制台输出屏幕和 JUnit 窗格是否成功

    此方案的 JUnit 代码

    Config.properties

    RadioBtns_Checkboxes.java

    1. package com.blog.junitTests;
    2. import java.io.FileInputStream;
    3. import java.util.List;
    4. import java.util.Properties;
    5. import java.util.concurrent.TimeUnit;
    6. import org.junit.After;
    7. import org.junit.Before;
    8. import org.junit.Test;
    9. import org.openqa.selenium.By;
    10. import org.openqa.selenium.WebDriver;
    11. import org.openqa.selenium.WebElement;
    12. import org.openqa.selenium.firefox.FirefoxDriver;
    13. public class RadioBtns_Checkboxes {
    14. // Declaring variables
    15. private WebDriver driver;
    16. private String baseUrl;
    17. Properties props;
    18. @Before
    19. public void setUp() throws Exception {
    20. // Creates an empty property list
    21. props = new Properties();
    22. // A connection is created to config.properties file
    23. FileInputStream fis = new FileInputStream("resources//config.properties");
    24. // Reads the properties from the input byte stream
    25. String firefoxPath = props.getProperty("firefoxPath");
    26. // Assign the URL to be invoked to a String variable
    27. baseUrl = props.getProperty("baseUrl");
    28. // Mention the property where required
    29. System.setProperty("webdriver.gecko.driver", firefoxPath);
    30. // Create a new instance for the class FirefoxDriver
    31. // that implements WebDriver interface
    32. driver = new FirefoxDriver();
    33. // Implicit wait for 5 seconds
    34. driver.manage().timeouts().implicitlyWait(5, TimeUnit.SECONDS);
    35. }
    36. @Test
    37. public void testPageTitle() throws Exception {
    38. // Open baseUrl in Firefox browser window
    39. driver.get(baseUrl);
    40. // Locate 'Tricycle' checkbox using name
    41. WebElement tricycleCheckbox = driver.findElement(By.name("vehicle2"));
    42. // Check if tricyle is displayed
    43. System.out.println("Is tricycle displayed? "+ tricycleCheckbox.isDisplayed());
    44. // Check if tricyle is enabled to select
    45. if (tricycleCheckbox.isEnabled()) {
    46. // Click if enabled
    47. tricycleCheckbox.click();
    48. } else {
    49. // Print message to console if disabled
    50. System.out.println("Unable to select 'Tricycle' checkbox as it is disabled.");
    51. }
    52. //Get all checkbox elements in a list
    53. List<WebElement> list = driver.findElements(By
    54. .cssSelector("input[type='checkbox']"));
    55. // Loops through all checkboxe elements
    56. for (int i = 0; i < list.size(); i++) {
    57. // Checking if the checkbox is a 'Van' or 'SUV'
    58. if ((list.get(i).getAttribute("value").trim()
    59. .equalsIgnoreCase("van"))
    60. || (list.get(i).getAttribute("value").trim()
    61. .equalsIgnoreCase("suv"))) {
    62. // Print selection status to console
    63. System.out.println("BEFORE: Is "
    64. + list.get(i).getAttribute("value") + " selected? "
    65. if (!(list.get(i).isSelected())) {
    66. // Click the checkbox
    67. list.get(i).click();
    68. System.out.println("AFTER: Is "
    69. + list.get(i).getAttribute("value") + " selected? "
    70. + list.get(i).isSelected());
    71. } else {
    72. // Uncheck the checkbox
    73. list.get(i).click();
    74. System.out.println("AFTER: Is "
    75. + list.get(i).getAttribute("value") + " selected? "
    76. + list.get(i).isSelected());
    77. }
    78. System.out.println("Next...");
    79. }
    80. }
    81. // Locate 'Sedan' checkbox using xPath
    82. WebElement sedanCheckbox = driver.findElement(By
    83. .xpath("//input[@name='vehicle5']"));
    84. System.out.println("Trying to select and de-select Sedan checkbox...");
    85. for (int i = 0; i < 2; i++) {
    86. // Click the checkbox
    87. sedanCheckbox.click();
    88. // Print current status to console
    89. System.out.println("Selection status of 'Sedan' checkbox: "
    90. + sedanCheckbox.isSelected());
    91. }
    92. // Locate 'Magazines' radio button using cssSelector
    93. WebElement magazinesRadioBtn = driver.findElement(By
    94. .cssSelector("input[value='Magazines']"));
    95. // Check if radio button is selected by default
    96. if (magazinesRadioBtn.isSelected()) {
    97. // Print message to console
    98. System.out.println("Magazines radio button is selected by default");
    99. } else {
    100. // Click the radio button
    101. magazinesRadioBtn.click();
    102. }
    103. } //End of @Test
    104. @After
    105. public void tearDown() throws Exception {
    106. // Close the Firefox browser
    107. driver.close();
    108. }

    每行代码都提供了清晰的注释,使其易于说明。 执行测试用例后,eclipse IDE 控制台窗口的输出如下,

    属性文件使自动化测试人员的生活成真,梦想成真。 由此证明! 现在该尝试使用今天的概念了。 请务必戴好安全帽,以免碰到! 还有一件事,我可以在 GitHub 仓库中找到所有代码文件。 去看一下!