Как проверить, активирован ли элемент только через 60 секунд
В моем приложении есть ссылка, которая активируется через 60 секунд. Я должен убедиться, что ссылка включается только через 60 секунд, а не до этого. Перепробовал ниже способы:
я пытался
element to be clickable()
при свободном ожидании /webdriver wait/thread.sleep, и все возвращаются, этот элемент включен, где он фактически отключен до 60 секунд.я пробовал getAttribute("отключен") также, он также возвращает ложь.
Единственное отличие, которое я вижу в html - это атрибут class. Когда он отключен, к значению атрибута класса добавляется дополнительный текст (отключен).
3 ответа
Попробуйте с этим (и настройте по мере необходимости):
long ts1 = System.currentTimeMillis()/1000;
new WebDriverWait(driver, 60).until(ExpectedConditions.attributeToBe(element, "disabled", null);
long ts2 = System.currentTimeMillis()/1000;
Assert.assertTrue((ts2-ts1)>=60);
Если элемент не будет отключен до истечения 60 секунд, произойдет сбой подтверждения.
Поскольку ссылка в приложении активируется через 60 секунд и до тех пор (будучи отключенной), class
Атрибут содержит дополнительное значение отключено, для проверки этого варианта использования вы можете использовать try-catch{}
блок, и вы можете использовать любую из следующих стратегий локатора на основе Python:
CSS_SELECTOR
:try: WebDriverWait(driver, 60).until(EC.element_to_be_clickable((By.CSS_SELECTOR, "tag_name[some_attribute='value_of_some_attribute']:not(.disabled)"))) print("Class attribute failed to contain the value disabled for 60 seconds") except TimeoutException: print("Class attribute successfully contained the value disabled for 60 seconds")
XPATH
:try: WebDriverWait(driver, 60).until(EC.element_to_be_clickable((By.XPATH, "//tag_name[@some_attribute='value_of_some_attribute' and not(@class='disabled')]"))) print("Class attribute failed to contain the value disabled for 60 seconds") except TimeoutException: print("Class attribute successfully contained the value disabled for 60 seconds")
Что вы можете сделать, это сначала проверить, отключен он или нет, и через 60 секунд проверить, включен он или нет, в этом случае должен работать приведенный ниже код:
boolean checkDisabled = element.isEnabled(); // this should return false
Thread.sleep(60000);
boolean checkDisabled = element.isEnabled(); // this should return true