a=driver.find_element(By.XPATH, '//*[@id="TechPerson_List"]/tbody/tr[2]/td[3]/a').click() # 第一人确定点开 AttributeError: 'NoneType' object has no attribute 'click'
时间: 2024-02-13 12:00:42 浏览: 250
这个错误通常是因为 `find_element` 没有找到匹配的元素,返回了 `None`。在这种情况下,调用 `click()` 方法会抛出 `'NoneType' object has no attribute 'click'` 异常。
你可以尝试使用显示等待来确保元素已经出现,然后再进行点击操作。下面是一个示例代码:
```python
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
# 等待元素出现并且可点击
element = WebDriverWait(driver, 10).until(
EC.element_to_be_clickable((By.XPATH, '//*[@id="TechPerson_List"]/tbody/tr[2]/td[3]/a'))
)
# 点击元素
element.click()
```
这里使用了 `WebDriverWait` 和 `expected_conditions` 来等待元素出现并且可点击,然后再进行点击操作。你可以根据实际情况调整等待时间。
相关问题
case\数据驱动EX表.py:33 (ExcelText.test_excel01_1___huangyj6____CDEi986hyj__) self = <数据驱动EX表.ExcelText testMethod=test_excel01_1___huangyj6____CDEi986hyj__> username = 'huangyj6', password = 'CDEi986hyj' @data(*read_excel()) #读取xlsx @unpack def test_excel01(self,username, password): print(username, password) driver = self.driver sleep(2) driver.find_element(By.XPATH,'//*[@id="username"]').send_keys(username) driver.find_element(By.XPATH,'//*[@id="password"]').send_keys(password) driver.find_element(By.XPATH,'//*[@id="loginForm"]/table/tbody/tr[3]/td/a/div/div/div').click() sleep(2) try: # 尝试登录 > driver.find_element(By.XPATH, '//*[@id="loginSuccess"]')
这段代码中使用了 `driver.find_element(By.XPATH, '//*[@id="loginSuccess"]')` 定位元素,这里的 `By.XPATH` 表示使用 XPath 定位方式,`//*[@id="loginSuccess"]` 表示定位到 ID 为 "loginSuccess" 的元素。
在 try 块中,我们使用这个方法来判断登录是否成功,如果成功则不会抛出异常,如果失败则会抛出 `NoSuchElementException` 异常。
需要注意的是,这里只是判断了登录是否成功,如果需要进行其他的操作,比如验证用户信息等,还需要进一步编写代码。
改进这段代码import time from time import sleep from selenium import webdriver from selenium.webdriver.common.action_chains import ActionChains from selenium.webdriver.support.ui import Select import csv import unittest import ddt driver = webdriver.Chrome() driver.maximize_window() driver.get("http://10.2.39.8/ams/front/login.do?gotourl=http%3A%2F%2F10.2.39.8%2Fams%2Ffront%2Fasset%2Fasset_list.do") driver.implicitly_wait(5) driver.find_element_by_xpath('//*[@id="fmedit"]/div[1]/label[2]/input').click() driver.find_element_by_xpath('//*[@id="taskId"]').send_keys('23') driver.find_element_by_xpath('//*[@id="loginName"]').send_keys('20210205') driver.find_element_by_xpath('//*[@id="password"]').send_keys('20210205') driver.find_element_by_xpath('//*[@id="fmedit"]/div[7]/button').click() driver.find_element_by_xpath('//*[@id="leftmenu_asset_brand"]/a').click() driver.find_element_by_xpath('//*[@id="content"]/div[2]/div/div[1]/button').click() driver.find_element_by_id("title").send_keys("username") driver.find_element_by_id("code").send_keys("password") driver.find_element_by_css_selector('#submitButton').click()使用csv文件参数化username和password
可以使用ddt库来实现csv文件参数化,代码如下:
```
import time
from time import sleep
from selenium import webdriver
from selenium.webdriver.common.action_chains import ActionChains
from selenium.webdriver.support.ui import Select
import csv
import unittest
import ddt
@ddt.ddt
class TestLogin(unittest.TestCase):
def setUp(self):
self.driver = webdriver.Chrome()
self.driver.maximize_window()
self.driver.get("http://10.2.39.8/ams/front/login.do?gotourl=http%3A%2F%2F10.2.39.8%2Fams%2Ffront%2Fasset%2Fasset_list.do")
self.driver.implicitly_wait(5)
def tearDown(self):
self.driver.quit()
@ddt.file_data('test_data.csv')
def test_login(self, username, password):
self.driver.find_element_by_xpath('//*[@id="fmedit"]/div[1]/label[2]/input').click()
self.driver.find_element_by_id("taskId").send_keys('23')
self.driver.find_element_by_id("loginName").send_keys(username)
self.driver.find_element_by_id("password").send_keys(password)
self.driver.find_element_by_css_selector('#fmedit > div:nth-child(7) > button').click()
self.assertIn('登录成功', self.driver.page_source)
```
其中,test_data.csv文件的格式为:
```
username,password
20210205,20210205
20210305,20210305
20210405,20210405
```
这样,就可以通过ddt库和csv文件实现对用户名和密码的参数化,从而实现自动化测试。
阅读全文