• 自动化测试下拉框选项定位报错


    关注 码龄 粉丝数 原力等级 -- 被采纳 被点赞 采纳率 城南華已开 2024-04-26 17:24 采纳率: 50% 浏览 1 首页/ 编程语言 / 自动化测试下拉框选项定位报错 pythonseleniumvue.js 我现在遇到一个问题,系统的前端框架是用vue + element,就导致下拉框的元素经过浏览器解析就变成input了,不是常用的select元素,那么我现在做web自动化的时候,定位下拉框元素该怎么做呀,指点指点我写的代码如下 input_element = driver.find_element(By.XPATH,'/html/body/div[1]/div/div[3]/div/form/div[4]/div[2]/form/div/div[1]/div/div/div/input') input_element.click() select = Select(input_element) select.select_by_visible_text('货物') 报错问题如下 收起 写回答 好问题 0 提建议 追加酬金 关注问题 微信扫一扫 点击复制链接 分享 邀请回答 编辑 收藏 删除 结题 收藏 举报 追加酬金 (90%的用户在追加酬金后获得了解决方案) 当前问题酬金 ¥ 0 (可追加 ¥500) ¥ 15¥ 20¥ 50¥ 100¥ 200 支付方式 扫码支付 二维码出错 点击刷新 支付金额 15 元 提供问题酬金的用户不参与问题酬金结算和分配 支付即为同意 《付费问题酬金结算规则》 结题 再想想 删除 再等等

    4条回答 默认 最新

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

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

      在处理Vue.js和Element UI构建的应用程序时,由于它们可能会动态地将元素,因此传统的Select类可能不适用。在这种情况下,你需要采取不同的方法来操作下拉框。

      首先,我们可以尝试使用JavaScript执行来模拟用户选择下拉框中的一个选项。以下是修改后的代码:

      from selenium import webdriver
      from selenium.webdriver.common.by import By
      from selenium.webdriver.support.ui import WebDriverWait
      from selenium.webdriver.support import expected_conditions as EC
      
      # 初始化驱动器(这里以Chrome为例)
      driver = webdriver.Chrome()
      
      # 访问目标URL
      driver.get("http://your-url.com")
      
      # 等待元素加载完成
      wait = WebDriverWait(driver, 10)
      
      # 找到输入框元素并点击它
      input_element = wait.until(EC.presence_of_element_located((By.XPATH, '/html/body/div[1]/div/div[3]/div/form/div[4]/div[2]/form/div/div[1]/div/div/div/input')))
      input_element.click()
      
      # 使用JavaScript执行来选择下拉框中的选项
      javascript = """
          var element = arguments[0];
          var optionText = arguments[1];
      
          // 获取所有子元素(包括option标签)
          var options = element.querySelectorAll('option');
      
          for (var i = 0; i < options.length; i++) {
              if (options[i].innerText === optionText) {
                  options[i].selected = true;
                  break;
              }
          }
      """
      
      # 传递输入框元素和要选择的文本给JavaScript执行
      driver.execute_script(javascript, input_element, '货物')
      
      # 关闭浏览器
      driver.quit()
      

      这段代码首先等待元素加载,然后找到输入框并触发点击事件,接着通过JavaScript执行来模拟用户在下拉框中选择“货物”这个选项。

      请确保替换上述代码中的"http://your-url.com"为实际的网页地址,并根据实际情况调整XPath表达式以匹配正确的下拉框输入元素。如果页面结构有所变化,你可能需要更新XPath以准确地定位到元素。

      展开全部

      评论 编辑记录
    • 阿里嘎多学长 2024-04-26 17:24
      关注

      以下内容由CHATGPT及阿里嘎多学长共同生成、有用望采纳:


      图片内容

      图片显示了一个Python错误信息,具体内容为:

      selenium.common.exceptions.UnexpectedTagNameException: Message: Select only works on 元素,但是Select类只能用于而不是元素不同。在Element UI中,下拉框可能是通过元素配合JavaScript来模拟实现的,因此传统的通过元素,但背后可能有一个隐藏的 
    • Kwan的解忧杂货铺 Java领域优质创作者 2024-04-26 17:24
      关注

      下午好🌅🌅🌅
      本答案参考ChatGPT-3.5

      问题分析: 系统使用的前端框架vue+element导致下拉框元素经过浏览器解析就变成了input元素,而不是常用的select元素,这就导致了使用select类进行下拉框操作时出错。

      解决方案:

      1. 使用JavaScript代码实现下拉操作:可以通过执行JavaScript代码,模拟鼠标点击下拉框并选择其中一个选项的操作。
      2. 直接定位下拉框选项元素进行选择:通过定位下拉框选项元素,直接进行选择操作。这个方式比较麻烦,需要先定位到下拉框选项元素,然后再点击元素进行选择。
      3. 使用第三方依赖库进行操作:可以使用第三方依赖库进行操作,例如pyautogui等。

      参考代码: 下面是使用JavaScript代码实现下拉操作的示例代码:

      input_element = driver.find_element(By.XPATH,'/html/body/div[1]/div/div[3]/div/form/div[4]/div[2]/form/div/div[1]/div/div/div/input')
      input_element.click()
      driver.execute_script("document.querySelectorAll('.el-select-dropdown__item')[0].click()")
      

      使用execute_script方法执行JavaScript代码,document.querySelectorAll('.el-select-dropdown__item')[0].click()代表点击下拉框第一个选项。

      评论
    • GISer Liu 2024-04-26 18:47
      关注

      该回答引用自GPT-3.5,由博主GISer Liu编写:

      针对你的问题,首先需要注意到使用 Vue + Element 框架时,下拉框元素不再是常规的 元素。因此,不能再使用 Select 类来处理下拉框的选项。解决这个问题的关键在于找到下拉框的选项并模拟点击。
      下面是解决问题的步骤:

      1. 定位下拉框 :首先要确保能够准确地定位到下拉框的输入框元素。你提供的 XPath 可能会随着页面结构的改变而失效,所以最好使用更具有唯一性和稳定性的方式来定位。
      2. 模拟点击 :找到下拉框的输入框后,模拟点击以展开下拉选项列表。
      3. 定位选项 :展开下拉选项列表后,需要定位到具体的选项。由于这些选项通常是动态生成的,你可能需要等待一段时间以确保它们已经完全加载。
      4. 点击选项 :找到目标选项后,模拟点击以选择它。
        下面是相应的代码大纲:
        python
        Copy code
        from selenium.webdriver.common.by import By
        from selenium.webdriver.support.ui import WebDriverWait
        from selenium.webdriver.support import expected_conditions as EC
        # 定位下拉框输入框
        dropdown_input = driver.find_element(By.XPATH, 'your_xpath_to_dropdown_input')
        # 模拟点击展开下拉选项列表
        dropdown_input.click()
        # 等待下拉选项列表加载完成
        wait = WebDriverWait(driver, 10)
        dropdown_options = wait.until(EC.visibility_of_all_elements_located((By.XPATH, 'your_xpath_to_dropdown_options')))
        # 遍历选项,定位目标选项并点击
        for option in dropdown_options:
        if option.text == '目标选项文本':
        option.click()
        break
        
        对于 XPath 部分,你需要根据实际情况自行替换成正确的 XPath,确保准确定位到下拉框输入框和选项。
        这个方案应该能解决你遇到的问题,确保了对于 Vue + Element 框架渲染的下拉框的有效操作。

      如果该回答解决了您的问题,请采纳!如果没有,请私信联系或评论您的疑惑

      展开全部

      评论
    编辑
    预览

    报告相同问题?

  • 相关阅读:
    【爬虫】8.1. 深度使用tesseract-OCR技术识别图形验证码
    基于混沌博弈优化的BP神经网络(分类应用) - 附代码
    Go语言学习之路(二)
    Kafka Stream 学习笔记-4 window and state store
    建议收藏,PMP应战篇(2)之易混淆知识点
    应急产业新蓝海,瑞驰的智慧应急解决方案如何打样?
    JavaAssist的进阶使用
    Java项目源码ssm+mysql实现进销存系统|仓库
    Golang zip压缩及加密
    03 基础配置webpack3打包vue文件
  • 原文地址:https://ask.csdn.net/questions/8095466