前戲
在進行web自動化的時候,我們有時需要獲取元素的屬性,有時需要添加,有時需要刪除,這時候就要通過js來進行操作了
實戰
from selenium import webdriver import unittest def addAttribute(driver, elementobj, attributeName, value): ''' 封裝向頁面標簽添加新屬性的方法 調用JS給頁面標簽添加新屬性,arguments[0]~arguments[2]分別 會用后面的element,attributeName和value參數進行替換 添加新屬性的JS代碼語法為:element.attributeName=value 比如input.name='test' ''' driver.execute_script("arguments[0].%s=arguments[1]" % attributeName, elementobj, value) def setAttribute(driver, elementobj, attributeName, value): ''' 封裝設置頁面對象的屬性值的方法 調用JS代碼修改頁面元素的屬性值,arguments[0]~arguments[1]分別 會用后面的element,attributeName和value參數進行替換 ''' driver.execute_script("arguments[0].setAttribute(arguments[1],arguments[2])", elementobj, attributeName, value) def getAttribute(elementobj, attributeName): # 封裝獲取頁面對象的屬性值方法 return elementobj.get_attribute(attributeName) def removeAttribute(driver, elementobj, attributeName): ''' 封裝刪除頁面屬性的方法 調用JS代碼刪除頁面元素的指定的屬性,arguments[0]~arguments[1]分別 會用后面的element,attributeName參數進行替換 ''' driver.execute_script("arguments[0].removeAttribute(arguments[1])", elementobj, attributeName) class TestDemo(unittest.TestCase): def setUp(self): self.driver = webdriver.Chrome() def test_dataPicker(self): url = "D:\PycharmProjects\zouzou\dom.html" self.driver.get(url) element = self.driver.find_element_by_xpath('//input') # 向頁面文本框input標簽中添加新屬性name='search' addAttribute(self.driver, element, 'name', 'search') # 添加新屬性后,查看一下新屬性值 print('添加的新屬性值%s="%s"' % ("name", getAttribute(element, "name"))) print('更改文本框中內容前的value的值:', getAttribute(element, 'value')) # 更改value的屬性值為“這是更改后的值” setAttribute(self.driver, element, 'value', '這是更改后的值') print('更改后value的值為:', getAttribute(element, 'value')) # 查看更改前input頁面元素中size屬性值 print('更改前size的屬性值為:', getAttribute(element, 'size')) # 更改input的屬性值為20 setAttribute(self.driver, element, 'size', 20) print('更改后size的屬性值為:', getAttribute(element, 'size')) # 查看刪除input頁面元素value屬性前的值 print('刪除前文本框value的值:', getAttribute(element, 'value')) # 刪除屬性值 removeAttribute(self.driver, element, 'value') print('刪除后文本框value的值:', getAttribute(element, 'value')) if __name__ == '__main__': unittest.main()