如果该字段存在,则检查它是否是只读的

时间:2017-03-16 15:09:48

标签: python selenium

我正在尝试检查该字段是否存在,如果存在,我需要确保它是一个只读字段。

这是我尝试过的,但我不认为这是一种非常有效的方法:

         if self.driver.find_element_by_xpath("//input[@id='cname']"):
            self.driver.find_element_by_xpath("//input[@id='cname' and @readonly='readonly']")
        elif self.driver.find_element_by_xpath("//input[@id='address']"):
            self.driver.find_element_by_xpath("//input[@id='address' and @readonly='readonly']")
        elif self.driver.find_element_by_xpath("//input[@id='address2']"):
            self.driver.find_element_by_xpath("//input[@id='address2' and @readonly='readonly']")
        elif self.driver.find_element_by_xpath("//input[@id='city']"):
            self.driver.find_element_by_xpath("//input[@id='city' and @readonly='readonly']")
        # country
        elif self.driver.find_element_by_xpath("//input[@id='country']"):
            self.driver.find_element_by_xpath("//input[@id='country']/../select[@disabled='disabled']")

我也试过使用这个方法,但问题是当字段存在而不是只读时它不会抛出错误:

def verifyReadOnly(self, driver):
        try: 
            self.driver.find_element_by_xpath("//input[@id='cname' or @id='address' or @id='city' or @id='address2' and @readonly='readonly']")
        except NoSuchElementException: 
            pass

        try:
            self.driver.find_element_by_xpath("//input[@id='cf_2698238' and @readonly='']")
        except NoSuchElementException: 
            pass

        try:
            self.driver.find_element_by_xpath("//input[@id='country']/../select[@disabled='disabled']")
        except NoSuchElementException: 
            pass

1 个答案:

答案 0 :(得分:2)

您可以使用element.is_enabled()来确定元素是否只读。如果是只读,is_enabled()将返回false。请参阅the docs

当我编写我将重用的代码时,我会编写一个函数。在这种情况下,我会编写一个接受locator参数的函数,然后如果元素存在且trueis_enabled()则返回false。然后,您将为每个元素调用此函数,并断言每个返回值为true。如果您需要帮助将定位器作为参数传递,This answer可以帮助您入门。