Selenium3+python3自動化(三十六)--expected_conditions模組 判斷文字(text_to_be_present_in_element)
阿新 • • 發佈:2020-09-03
前言
在做結果判斷的時候,經常想判斷某個元素中是否存在指定的文字,如登入後判斷頁面中賬號是否是該使用者的使用者名稱。
在前面的登入案例中,寫了一個簡單的方法,但不是公用的,在EC模組有個方法是可以專門用來判斷元素中存在指定文字的:text_to_be_present_in_element。
另外一個差不多的方法判斷元素的value值:text_to_be_present_in_element_value。
一、原始碼分析
#判斷元素中是否存在指定的文字,引數:locator,text
#__call__裡返回的是布林值:True和False
class text_to_be_present_in_element(object): """ An expectation for checking if the given text is present in the specified element. locator, text """ def __init__(self, locator, text_): self.locator = locator self.text = text_ def __call__(self, driver): try: element_text = _find_element(driver, self.locator).text return self.text in element_text except StaleElementReferenceException: return False
二、判斷文字
1.判斷百度首頁上,“新聞”按鈕這個元素中存在文字:新聞
2.locator引數是定位的方法(定位方法與find_element()一致)
3.text引數是期望的值
# coding:utf-8 from selenium import webdriver from selenium.webdriver.support.wait import WebDriverWait from selenium.webdriver.support import expected_conditions as EC driver=webdriver.Chrome() driver.get("https://www.baidu.com") print(driver.find_element("xpath","//div[@id='s-top-left']/a[1]").text) #成功 rs=EC.text_to_be_present_in_element(("xpath","//div[@id='s-top-left']/a[1]"),"新聞")(driver) print(rs) #失敗 rs1=EC.text_to_be_present_in_element(("xpath","//div[@id='s-top-left']/a[1]"),"地圖")(driver) print(rs1)
執行結果:
新聞 True False
三、判斷value的方法
1.原始碼如下
class text_to_be_present_in_element_value(object): """ An expectation for checking if the given text is present in the element's locator, text """ def __init__(self, locator, text_): self.locator = locator self.text = text_ def __call__(self, driver): try: element_text = _find_element(driver, self.locator).get_attribute("value") if element_text: return self.text in element_text else: return False except StaleElementReferenceException: return False
2.這個方法跟上面的差不多,只是這個是判斷的value的值
3.這裡舉個簡單案例,判斷百度搜索按鈕的value值(注意無value屬性不會報錯,會返回False)
參考程式碼:
# coding:utf-8 from selenium import webdriver from selenium.webdriver.support import expected_conditions as EC driver=webdriver.Chrome() driver.get("https://www.baidu.com") rs=EC.text_to_be_present_in_element_value(("id","su"),"百度一下")(driver) print(rs) rs1=EC.text_to_be_present_in_element_value(("xpath","//div[@id='s-top-left']/a[1]"),"新聞")(driver) print(rs1)
執行結果:
True False
四、小結
EC.text_to_be_present_in_element(locator,text)
EC.text_to_be_present_in_element_value(locator,text)
locator的寫法與find_element()的語法一致;
# coding:utf-8 from selenium import webdriver from selenium.webdriver.support import expected_conditions as EC driver=webdriver.Chrome() driver.get("https://www.baidu.com") rs=EC.text_to_be_present_in_element_value(("id","su"),"百度一下")(driver) print(rs) #True rrs=driver.find_element("id","su") print(rrs.get_attribute("value")) #百度一下 print(dir(rrs),rrs.text) #rrs的屬性和方法,空 #下面text無內容,返回False print(EC.text_to_be_present_in_element(("id","su"),"百度一下")(driver)) #False #下面無value屬性,不報錯,返回False rs1=EC.text_to_be_present_in_element_value(("xpath","//div[@id='s-top-left']/a[1]"),"新聞")(driver) print(rs1) #False print(driver.find_element("xpath","//div[@id='s-top-left']/a[1]").text) #新聞 print(EC.text_to_be_present_in_element(("xpath","//div[@id='s-top-left']/a[1]"),"新聞")(driver)) #True
執行結果:
True 百度一下 ['__class__', '__delattr__', '__dict__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__le__', '__lt__', '__module__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '__weakref__', '_execute', '_id', '_parent', '_upload', '_w3c', 'clear', 'click', 'find_element', 'find_element_by_class_name', 'find_element_by_css_selector', 'find_element_by_id', 'find_element_by_link_text', 'find_element_by_name', 'find_element_by_partial_link_text', 'find_element_by_tag_name', 'find_element_by_xpath', 'find_elements', 'find_elements_by_class_name', 'find_elements_by_css_selector', 'find_elements_by_id', 'find_elements_by_link_text', 'find_elements_by_name', 'find_elements_by_partial_link_text', 'find_elements_by_tag_name', 'find_elements_by_xpath', 'get_attribute', 'get_property', 'id', 'is_displayed', 'is_enabled', 'is_selected', 'location', 'location_once_scrolled_into_view', 'parent', 'rect', 'screenshot', 'screenshot_as_base64', 'screenshot_as_png', 'send_keys', 'size', 'submit', 'tag_name', 'text', 'value_of_css_property'] False False 新聞 True