У меня есть этот класс с именем ReusableFunctions, который я использую для реализации методов, которые обычно используются, например, для проверки наличия элементов или невидимости элементов. Я объявил все эти методы как статические и вызываю их, используя имя класса в моем тестовом классе. У меня есть методы, которые ожидают период времени по умолчанию (в моем случае 20 секунд), а также методы, которые принимают значение времени в качестве параметра и ожидают указанный период времени. Проблема заключается в том, что, хотя я передаю параметры в методы ожидания, WebDriver отбрасывает значение параметра и просто ждет времени по умолчанию, равного 20 секундам. У меня есть журналы, напечатанные на моей консоли, и я вижу, что хотя я передал значение параметра времени, равное 10 секунд веб-драйвер отбрасывает это и ждет в течение 20 секунд. Пожалуйста, ознакомьтесь с кодом ниже, чтобы понять это лучше.
//The reusable class where i implement my wait methods
public class ReusableFunctions extends InitializeBrowser{
static Logger log = Logger.getLogger(ReusableFunctions.class);
//A general wait method that waits for 20 seconds before throwing an
exception
public static void waitTillElementDisappears(WebElement we){
WebDriverWait wait=new WebDriverWait(driver, 20);
wait.until(ExpectedConditions.invisibilityOf(we));
}
//A wait method that takes in a parameter value and waits for the
specified time limit
public static boolean
waitTillElementDisappearsWithCustomizedWaitParameter(WebElement we, long
timeValue){
WebDriverWait waitTillInvisibility=new WebDriverWait(driver,
timeValue);
waitTillInvisibility.until(ExpectedConditions.invisibilityOf(we));
if(!we.isDisplayed()){
return true;
}else{
return false;
}
}
}
//This is how I write validation methods using the above wait
implementations
public void clickEditInCommunityList(){
log.info("Clicking edit button in the community list section");
ExtentTestManager.getTest().log(Status.INFO,"Clicking edit button in
the community list section");
try{
if(errorMessageBox.isDisplayed()){
ReusableFunctions.waitTillElementDisappearsWithCustomizedWaitParameter
(errorMessageBox,10);
}
}catch(Exception e){
log.info("The exception is++++"+e);
log.info("Error message box not displayed");
}
try{
if(addBackgroundErrorMessage.isDisplayed()){
ReusableFunctions.waitTillElementDisappears(addBackgroundErrorMessage);
}
}catch(Exception e){
log.info("The exception is++++"+e);
log.info("Error messages background not displayed");
}
communityEditButton.click();
log.info("Edit button clicked successfully");
ExtentTestManager.getTest().log(Status.INFO,"Edit button clicked
successfully");
}
Как вы можете видеть из приведенного выше кода в одной попытке, блок catch я использовал стандартную функцию ожидания, которая ожидает в течение 20 секунд, а в другой попытке, блок catch я использовал другую функцию ожидания, которая принимает значение времени 10 секунд в качестве его параметра. Но когда я запускаю эти тесты, из моих журналов видно, что в обоих попытках веб-драйвер catch-блоков ждет 20 секунд.
Logs below
05-07-2019 **15:39:38** INFO [SNMPPage]: Clicking edit button in the
community list section
05-07-2019 **15:39:59** INFO [SNMPPage]: The exception
is++++org.openqa.selenium.TimeoutException: Expected condition failed:
waiting for invisibility of Proxy element for: DefaultElementLocator
'By.xpath: //ul[@id='noty_center_layout_container']' (tried for 10
second(s) with 500 milliseconds interval)
Приведенный выше журнал - это то, что я получаю, когда выполняется оператор wait со значением параметра time. Вы можете видеть, что это говорит 10 секунд, но значение метки времени показывает 20 секунд.
Любая помощь по этому вопросу будет принята с благодарностью.