首页 > 解决方案 > 有没有办法在同一方法中传递不同(但特定)类型的对象,并根据对象的类型有不同的处理方式

问题描述

我必须编写一个方法来单击网页上存在的元素。问题是我的方法中只能有两种类型的对象中的一种,即“WebElement”对象或“By”对象。因此,为了做到这一点,我必须为两个重载方法编写重复的代码行,如下所示:

    public void clickElement(WebElement element) {
        Line 1;
        Line 2;
        element.click();
        Line 3;
    }
    
    public void clickElement(By locator) {
        Line 1;
        Line 2;
        driver.findElement(locator).click();
        Line 3;
    }

是否可以只编写一种方法,该方法只能采用两种类型的对象中的一种并相应地表现?像这样的东西:

public void clickElement(WebElement element **OR** By locator) {
        Line 1;
        Line 2;
        element.click; **OR** driver.findElement(locator).click();
        Line 3;
    }

Let me know if my question needs more clarification or inputs.

标签: javaseleniumooppolymorphism

解决方案


我没有使用硒。根据您的代码,我假设driver.findElement()returnWebElement和 Line 1, 2, 3 在两种方法中完全相同。如果是这种情况,我能想到的最好的实现方法如下。

    public void clickElement(WebElement element) {
        Line 1;
        Line 2;
        element.click();
        Line 3;
    }
    
    public void clickElement(By locator) {
        clickElement(driver.findElement(locator));
    }

通过这样做,我们可以最大限度地重用代码,同时保留方法签名,该签名强制可以传递给这些方法的类的类型。


推荐阅读