【问题标题】:How to set browser arguments conditionally (Selenium-Jupiter specific)如何有条件地设置浏览器参数(特定于 Selenium-Jupiter)
【发布时间】:2020-04-21 15:29:30
【问题描述】:

我已经尝试了很多方法来在 chrome-in-docker 浏览器中设置代理。

我终于找到了可行的方法,但这不是最好的解决方案。

@BeforeEach
public void beforeEach(@Arguments("--proxy-server=server:portNum") WebDriver driver) {
    this.registrationPage = new RegistrationPage(driver);
    this.registrationPage.navigateTo();
}

这在我在 Jenkins 中运行测试时有效(需要代理),但在本地运行时会失败。

有没有更好的方法来设置代理服务器,或者有条件地设置?

我的代码使用 maven 在 Java 中运行。我可以向 Jenkins 添加系统属性(-Dis.CI=true 或其他),但我只能弄清楚如何将这些参数设置为方法参数。这绝对不适用于有条件地设置它们。

非常感谢任何其他设置 --proxy-server 的方法。我还希望有一种全局设置的方法。必须在每个测试类中设置它是一场噩梦。

我尝试过使用 WebDriverManager.globalConfig().setProxy("...") 并没有效果。我假设配置中的代理与代理服务器不同。

【问题讨论】:

    标签: selenium-jupiter


    【解决方案1】:

    我最终在 ChromeOptions 中明确设置了这个。 这并不理想,但它是我能找到的最佳解决方案。我仍然希望找到一个适用于所有浏览器的更通用的解决方案。

    我还做了一个 is.CI 系统属性,是我在 Jenkins 中运行时设置的。这是必要的,因为代理不能在本地工作。

    @ExtendWith(SeleniumExtension.class)
    public class BaseTest {
    @Options
    static ChromeOptions options = new ChromeOptions();
    
    @BeforeAll
    public static void beforeAll() {
        Boolean isCI = Boolean.getBoolean("is.CI");
    
        if (isCI) {
            options.addArguments("--proxy-server=server:portNum");
        }
      }
    }
    

    【讨论】:

    • 我会通过使用环境变量来简化它。 System.getProperty("proxy.port", "8888") 或更好的是,使用 Typesafe 库从属性文件中加载该值。属性文件可能是相当复杂的测试配置的来源,而且看起来效果很好。
    • 我们使用 maven 在 Jenkins 中运行它。在 Jenkins 中运行时传递 -Dis.CI=true 并在 POM 文件中默认为 false 非常简单。这也意味着我们可以在它运行时更改属性,而无需修改任何文件。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-04-12
    • 2012-02-11
    • 2019-02-09
    • 1970-01-01
    • 2019-06-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多