Java 如何在方法中使用(WebElement webdriverWait,直到元素可单击)并调用该方法以重复使用

Java 如何在方法中使用(WebElement webdriverWait,直到元素可单击)并调用该方法以重复使用,java,selenium,class,wait,Java,Selenium,Class,Wait,根据我下面的代码,我需要定期使用Wait元素。有没有什么方法可以让我通过调用方法重新使用这段代码 任何帮助或建议都将不胜感激 public static By header=By.xpath(“/*[@id=\'content\']/h1”) 你可以试试这个 public static void ElementClickable(By selector, Object obj) throws IOException { WebDriverWait wait = new WebDriver

根据我下面的代码,我需要定期使用Wait元素。有没有什么方法可以让我通过调用方法重新使用这段代码

任何帮助或建议都将不胜感激

public static By header=By.xpath(“/*[@id=\'content\']/h1”)

你可以试试这个

public static void ElementClickable(By selector, Object obj) throws IOException {
    WebDriverWait wait = new WebDriverWait(driver, 50);
    WebElement wait2 = wait.until(ExpectedConditions.elementToBeClickable(selector));
    find(obj).isDisplayed();
    CaptureScreenshot.Screenshot(driver,"Application HomePage-");
}
你可以试试这个

public static void ElementClickable(By selector, Object obj) throws IOException {
    WebDriverWait wait = new WebDriverWait(driver, 50);
    WebElement wait2 = wait.until(ExpectedConditions.elementToBeClickable(selector));
    find(obj).isDisplayed();
    CaptureScreenshot.Screenshot(driver,"Application HomePage-");
}

我想你要找的是这样的东西

public static void ClickLink_Accounts() throws IOException
{
    waitForHeader();
    find(Accounts).isDisplayed();
    CaptureScreenshot.Screenshot(driver, "Application HomePage-");
}

public static void ClickLink_Tasks() throws IOException
{
    waitForHeader();
    find(Tasks).isDisplayed();
    CaptureScreenshot.Screenshot(driver, "Application HomePage-");
}

public static void waitForHeader()
{
    new WebDriverWait(driver, 50).until(ExpectedConditions.elementToBeClickable(header));
}
但是。。。当我看到你的两个ClickLink*方法时,我看到了很多重复的代码。我将寻找一种方法,将这两种方法(可能还有其他未来的方法)组合成一种接受参数的方法。我假设
帐户
任务
是由定位器执行的,因为您要传递到方法
find()
?如果是这样,你可以这样做

public static void ClickLink(By locator) throws IOException
{
    waitForHeader();
    find(locator).isDisplayed();
    CaptureScreenshot.Screenshot(driver, "Application HomePage-");
}

并大大简化了代码。有关更多信息,请参阅。

我认为您正在寻找的是类似这样的内容

public static void ClickLink_Accounts() throws IOException
{
    waitForHeader();
    find(Accounts).isDisplayed();
    CaptureScreenshot.Screenshot(driver, "Application HomePage-");
}

public static void ClickLink_Tasks() throws IOException
{
    waitForHeader();
    find(Tasks).isDisplayed();
    CaptureScreenshot.Screenshot(driver, "Application HomePage-");
}

public static void waitForHeader()
{
    new WebDriverWait(driver, 50).until(ExpectedConditions.elementToBeClickable(header));
}
但是。。。当我看到你的两个ClickLink*方法时,我看到了很多重复的代码。我将寻找一种方法,将这两种方法(可能还有其他未来的方法)组合成一种接受参数的方法。我假设
帐户
任务
是由定位器执行的,因为您要传递到方法
find()
?如果是这样,你可以这样做

public static void ClickLink(By locator) throws IOException
{
    waitForHeader();
    find(locator).isDisplayed();
    CaptureScreenshot.Screenshot(driver, "Application HomePage-");
}

并大大简化了代码。有关更多信息,请参阅。

非常感谢。这就解决了问题。这就是问题所在,因为我必须一次又一次地重复使用相同的代码。。。这不是最好的方式…非常感谢。这就解决了问题。这就是问题所在,因为我必须一次又一次地重复使用相同的代码。。。哪一个不是最好的方法。。。