Pytest+Selenium代码运行时request.cls.driver处报无效语法错误求助
问题排查结果
根本错误原因
你代码里的CSS选择器参数没有加引号,具体出错行如下:
driver.find_element_by_css_selector(#_evidon-banner-acceptbutton).click()
Python中#是单行注释的起始标识,你没有把CSS选择器用字符串包裹的情况下,Python会把#_evidon-banner-acceptbutton).click()整段识别为注释,导致这行代码实际只有driver.find_element_by_css_selector(,缺少闭合的右括号和参数,语法解析出错。由于Python解析时会认为上一行代码未结束,所以报错的行号会偏移指向后面的request.cls.driver = driver行,这也是你觉得报错位置和实际问题不对应的原因。
你注释掉iframe相关代码段后语法错误消失,测试可正常运行,也和这个错误原因完全匹配。
修复方案
把CSS选择器用单引号或者双引号包裹即可,修改后的代码段如下:
# 原错误行替换为下面这行 driver.find_element_by_css_selector('#_evidon-banner-acceptbutton').click()
额外优化建议
- Selenium 4.0+版本已经废弃了
find_element_by_*系列方法,建议替换为统一的find_element写法,示例:from selenium.webdriver.common.by import By # 替换xpath查找 iframe = driver.find_element(By.XPATH, "//iframe[@name='__tcfapiLocator']") # 替换css选择器查找 driver.find_element(By.CSS_SELECTOR, '#_evidon-banner-acceptbutton').click() - Windows路径中的反斜杠建议加转义或者用原始字符串,避免特殊字符转义问题,比如
executable_path=r"C:\webdrivers\chromedriver.exe"
内容的提问来源于stack exchange,提问作者SWestern
相关产品推荐
相关产品推荐

