如何仅在60秒后验证元素是否启用

时间:2019-05-24 17:53:14

标签: selenium selenium-webdriver try-catch webdriverwait fluentwait

我的应用程序中有一个链接,该链接在60秒后启用。我必须验证,该链接仅在60秒后才启用,而不是在此之前。 尝试过以下方法:

  1. 我尝试了element to be clickable()并使用流畅的wait / webdriver wait / thread.sleep,所有人都返回了启用该元素的位置,因为该元素实际上一直被禁用到60秒。

  2. 我也尝试过getAttribute(“ disabled”)also,它也返回false。

我可以在html中看到的唯一区别是class属性。禁用该属性时,将向class属性值添加其他文本(禁用)。

3 个答案:

答案 0 :(得分:1)

尝试一下(并根据需要尝试tweek):

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秒内未禁用该元素,则断言将失败。

答案 1 :(得分:0)

在应用程序内的链接在 60 秒后启用,直到此(被禁用), class 属性包含附加值 disabled ,要验证此用例,可以使用try-catch{}块,也可以使用以下基于 Python Locator Strategies之一:

  • 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")
    

答案 2 :(得分:-1)

您可以做的是先检查是否已禁用它,然后在60秒后检查它是否已启用,在这种情况下,下面的代码应该可用:

boolean checkDisabled = element.isEnabled(); // this should return false    
Thread.sleep(60000);
boolean checkDisabled = element.isEnabled(); // this should return true