城南華已开 2024-04-25 18:17 采纳率: 42.9%
浏览 4
已结题

web自动化测试运行报错

web自动化测试,我用xpath定位一个元素,为什么一直说找不到这个呢,运行就报错,具体报错和界面的元素放到下面,麻烦指点一二
代码:


projectName = driver.find_element(By.XPATH,'//input[@placeholder="输入项目名称"]')

报错:

Traceback (most recent call last):
  File "E:\UiTest\testUi\basefactory\web_ui_demo.py", line 60, in <module>
    projectName = driver.find_element(By.XPATH,'//input[@placeholder="输入项目名称"]')
  File "E:\UiTest\uiautotest\.venv\lib\site-packages\selenium\webdriver\remote\webdriver.py", line 741, in find_element
    return self.execute(Command.FIND_ELEMENT, {"using": by, "value": value})["value"]
  File "E:\UiTest\uiautotest\.venv\lib\site-packages\selenium\webdriver\remote\webdriver.py", line 347, in execute
    self.error_handler.check_response(response)
  File "E:\UiTest\uiautotest\.venv\lib\site-packages\selenium\webdriver\remote\errorhandler.py", line 229, in check_response
    raise exception_class(message, screen, stacktrace)
selenium.common.exceptions.NoSuchElementException: Message: no such element: Unable to locate element: {"method":"xpath","selector":"//input[@placeholder="输入项目名称"]"}
  (Session info: chrome=107.0.5304.122); For documentation on this error, please visit: https://www.selenium.dev/documentation/webdriver/troubleshooting/errors#no-such-element-exception
Stacktrace:
Backtrace:
    Ordinal0 [0x011EACD3+2075859]
    Ordinal0 [0x0117EE61+1633889]
    Ordinal0 [0x0107B7BD+571325]
    Ordinal0 [0x010AAC2F+764975]
    Ordinal0 [0x010AAE1B+765467]
    Ordinal0 [0x010DD0F2+970994]
    Ordinal0 [0x010C7364+881508]
    Ordinal0 [0x010DB56A+963946]
    Ordinal0 [0x010C7136+880950]
    Ordinal0 [0x0109FEFD+720637]
    Ordinal0 [0x010A0F3F+724799]
    GetHandleVerifier [0x0149EED2+2769538]
    GetHandleVerifier [0x01490D95+2711877]
    GetHandleVerifier [0x0127A03A+521194]
    GetHandleVerifier [0x01278DA0+516432]
    Ordinal0 [0x0118682C+1665068]
    Ordinal0 [0x0118B128+1683752]
    Ordinal0 [0x0118B215+1683989]
    Ordinal0 [0x01196484+1729668]
    BaseThreadInitThunk [0x76476359+25]
    RtlGetAppContainerNamedObjectPath [0x76F08964+228]
    RtlGetAppContainerNamedObjectPath [0x76F08934+180]


界面元素截图:

img

  • 写回答

4条回答 默认 最新

  • 专家-赤兔[在线] 全栈领域优质创作者 2024-04-25 18:17
    关注

    引自免费微信小程序:皆我百晓生

    从错误信息来看,NoSuchElementException 表示Selenium没有找到匹配给定XPath表达式的元素。这可能是因为元素尚未加载,或者页面结构与提供的XPath表达式不匹配。

    首先,确认一下以下几个方面:

    1. 确保元素在网页上是可见的,并且已经完全加载。
    2. XPath表达式是否正确,包括引号的转义。
    3. 检查页面结构,确保元素的标签、属性和值与XPath表达式中的描述一致。
    4. 考虑使用等待条件(例如WebDriverWait)确保元素加载完成再进行查找。

    针对上述情况,你可以尝试以下步骤:

    **第一步:**检查XPath表达式,确保引号转义正确。这里可以稍微修改一下你的XPath,将双引号内的文本用单引号包围,然后外部使用双引号:

    projectName = driver.find_element(By.XPATH, '//*[@placeholder=\'输入项目名称\']')
    

    **第二步:**使用WebDriverWait等待元素加载完成。添加以下导入语句并使用ExpectedConditions.presence_of_element_located()方法:

    from selenium.webdriver.common.by import By
    from selenium.webdriver.support.ui import WebDriverWait
    from selenium.webdriver.support import expected_conditions as EC
    
    wait = WebDriverWait(driver, 10)  # 设置最长等待时间为10秒
    projectName = wait.until(EC.presence_of_element_located((By.XPATH, '//*[@placeholder=\'输入项目名称\']')))
    

    这样做的目的是让Selenium等待一段时间,直到找到指定的元素。如果在10秒内元素未出现,会抛出TimeoutException异常。

    **第三步:**如果以上步骤仍无法解决问题,可能是由于页面动态加载导致的。这时你需要查看元素是在何时加载的,可能需要调整等待策略。例如,如果元素在一个特定的JavaScript函数执行后出现,那么你可以监听该函数的完成事件。

    **第四步:**如果问题依然存在,尝试使用其他选择器(如CSS selector),看看是否能解决问题。对于这个例子,我们可以使用CSS selector input[placeholder='输入项目名称']:

    projectName = driver.find_element(By.CSS_SELECTOR, 'input[placeholder="输入项目名称"]')
    

    如果你仍然遇到问题,请提供更详细的页面HTML结构,以便更好地分析问题所在。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(3条)

报告相同问题?

问题事件

  • 系统已结题 5月4日
  • 已采纳回答 4月26日
  • 创建了问题 4月25日

悬赏问题

  • ¥15 更换了一个新的win10系统,再下载VS时碰到的问题,是C++组件的?
  • ¥15 关于罗技鼠标宏lua文件的问题
  • ¥15 halcon ocr mlp 识别问题
  • ¥15 已知曲线满足正余弦函数,根据其峰值,还原出整条曲线
  • ¥20 无法创建新的堆栈防护界面
  • ¥15 sessionStorage在vue中的用法
  • ¥15 wordpress更换域名后用户图片头像不显示
  • ¥15 如何在ubunto上安装CEF (Chromium Embedded Framework),并且基于qt实现打开一个web
  • ¥30 AD9854 为什么输出波形幅度受限,AI机器人勿扰
  • ¥15 如何在ubunto上安装CEF (Chromium Embedded Framework