刷新页面后获取get_attribute(" value")

时间:2016-11-30 01:52:45

标签: python python-2.7 selenium selenium-webdriver

目前mu情况如此:

  1. send_keys发送到字段
  2. 点击"保存"按钮(点击后刷新页面)
  3. 刷新页面后获取get_attribute("value")
  4. 我的代码:

        def fill_twitter(self):
    
            enter_twitter = "http://" + fake.text(max_nb_chars=13) + ".com"
    
            twitter_field = self.find_element(*ContractorsLocators.TWITTER)
            twitter_field.send_keys(enter_twitter)
    
            self.find_element(*ContractorsLocators.SAVE_BUTTON).click()
            time.sleep(4)
    
            assert twitter_field.get_attribute("value") == enter_twitter
    

    我的错误:

    StaleElementReferenceException: Message: stale element reference: element is not attached to the page document
    

    如何获得get_attribute("value")

3 个答案:

答案 0 :(得分:2)

  

StaleElementReferenceException:消息:陈旧元素引用:元素未附加到页面文档

most frequent cause是该元素所属的页面已刷新,或者用户已导航到另一页面。

正如您所说,单击“保存”按钮时页面会刷新。因此,要避免这种情况,您需要再次找到相同的元素(刷新元素)以获取其值,如下所示: -

assert self.find_element(*ContractorsLocators.TWITTER).get_attribute("value") == enter_twitter

答案 1 :(得分:0)

随着页面刷新,您最好在元素获取之前保存属性的值Stale.

def fill_twitter(self):

    enter_twitter = "http://" + fake.text(max_nb_chars=13) + ".com"

    twitter_field = self.find_element(*ContractorsLocators.TWITTER)
    twitter_field.send_keys(enter_twitter)
    value = twitter_field.get_attribute("value")

    self.find_element(*ContractorsLocators.SAVE_BUTTON).click()
    time.sleep(4)

    assert value == enter_twitter

答案 2 :(得分:0)

要在刷新页面后检查元素是否可见,请使用显式sleep()函数,并在4秒后使用WebDriverWait检查该组件是否可见。

element = WebDriverWait(driver, 10).until(
    EC.presence_of_element_located((By.ID, "myDynamicElement"));

访问http://selenium-python.readthedocs.io/waits.html#explicit-waits以便更好地理解。