Я настоятельно рекомендую не писать свой код таким образом, вместо этого создайте фреймворк.
Создайте класс SeleniumUtility (или любое другое имя) и напишите такие методы: Пример (Вы можете удалить драйвер WebDriver))
/**
* Method returns WebElement by Xpath.
*
* @param String xpathExpression
* @param WebDriver driver
* @return WebElement
*/
public WebElement getElementByXpath(String xpathExpression, WebDriver driver){
return driver.findElement(By.xpath(xpathExpression));
}
/**
* Method returns WebElement by ID.
*
* @param String id
* @param WebDriver driver
* @return WebElement
*/
public WebElement getElementByID(String id, WebDriver driver){
return driver.findElement(By.id(id));
}
Или как-то так:
/**
* Method returns By.
*
* @param String identifier Example: xpath,id,name etc
* @param String expression Example: //*[@class='text']
* @return By
*/
public By getBy(String identifier, String expression){
switch (identifier.toLowerCase()) {
case "xpath":
return By.xpath(expression);
case "id":
return By.id(expression);
case "name":
return By.name(expression);
case "classname":
return By.className(expression);
case "cssselector":
return By.cssSelector(expression);
case "linktext":
return By.linkText(expression);
case "partiallinktext":
return By.partialLinkText(expression);
case "tagname":
return By.tagName(expression);
default:
throw new RuntimeException("Invalid identifier passed: " + identifier);
}
}
Записать явное ожидание и свободное ожидание в другом классе и использовать его снова и снова.
Теперь весь вашкод будет выглядеть примерно так:
try {
CurrentObject = waitTillElementLocated(getBy("cssselector","SearchPar"));
} catch (Exception e) {
System.out.println("Element not found: " + e);
}
ИЛИ
try {
CurrentObject = waitTillElementLocated(getBy("id","SearchPar"));
} catch (Exception e) {
System.out.println("Element not found: " + e);
}