Selenium:遍历元素列表

2024-03-01

我正在使用 XPath/CSS 和 Selenium 来定位网站上的元素。我想创建一种方法,在该方法中迭代定位器列表(XPath / CSS),程序选择有效的一个。换句话说,它从定位器一开始 - 如果定位器存在,则返回 true 并存在循环。否则,它将移至列表中的下一个定位器。一旦耗尽所有 CSS 定位器,它就会转向 XPath 等等。

目前,我正在考虑按如下方式实施:

public boolean iterate(WebDriver driver, By selectorType, String[] locator)
    {

        driver.get("URL");
        for(int selectorListCounter = 0; selectorListCounter < locator.length; selectorListCounter++) {

            try 
            {

                driver.findElement(By.(selectorType)).sendText();
                System.out.println("CSS Selector: " + CSS + " found");
                return true;
            } catch (Exception e)

            {
                System.out.println(CSS + " CSS Selector Not Present");
                return false;
            }


        }

然后我计划为每个定位器类型调用此方法(一次用于 XPath,一次用于 CSS 等)

这是最好的方法吗?


实际上我昨天这样做只是为了加快结果处理速度。 你没有成功和失败,只有选项 1 和选项 2。

该程序中每次检查元素的隐式等待时间为 1 秒。因此 while 循环总共持续 8 秒(因为它每次迭代生成两个数组)。这通过将元素放入数组中来检查元素是否存在,然后检查数组的大小,如果元素不存在,则数组将为空。然而,当这些条件之一失败时,这意味着页面上存在您的元素之一。

然后在它下面,我们设置布尔值来找出页面上存在哪些元素,并捕获不存在的元素的错误。

driver.manage().timeouts().implicitlyWait(1, TimeUnit.SECONDS);
int checkForElement=1;
success = false; failure = false;
        while (driver.findElements(By.className("successMessage")).size()==0 && driver.findElements(By.className("errormessage")).size()==0 && checkForElement<=4 )
        {
            checkForElement+=1;
        }
        checkForElement=1;//reset variable
        try
        {
            @SuppressWarnings("unused")//suppresses the warning so that the class is clean
            WebElement successful = driver.findElement(By.className("successMessage"));//not used practically, but logically used to look for the presence of an element without waiting the normal implicit wait time I would have at 6 seconds
            success = true;
        }
        catch(Exception e)
        {
            success = false;
        }
        try
        {
            @SuppressWarnings("unused")//suppresses the warning so that the class is clean
            WebElement failing = driver.findElement(By.className("errormessage"));//not used practically, but logically used to look for the presence of an element without waiting the normal implicit wait time I would have at 6 seconds
            failure = true;
        }
        catch(Exception e)
        {
            failure = false;
        }

        if(success)
        {
            //run success code
        }
        else if(failure)
        {
            //run failure code
        }
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Selenium:遍历元素列表 的相关文章

随机推荐

  • 什么是加载外部资源的 HTML 元素列表? (HTML 电子邮件)

    我正在寻找一个可以加载外部资源的元素列表 因为不允许通过 JavaScript 进行额外的 DOM 操作 我正在尝试使用 HTML 查看器托管来自第三方的电子邮件 当发生这种情况时 我需要删除自动加载的所有资源 以便仅显示基本 HTML 即
  • 安卓用户代理

    我正在 Android 中编写一个应用程序 它使用 WebView 来显示 HTML 内容 我被告知要为我的应用程序获取 Android 用户代理 我该怎么做 我打开了http whatsmyuseragent com http whats
  • R 中 dplyr 中的“添加缺失的分组变量”消息

    我的脚本的一部分以前运行良好 但最近生成了一个奇怪的语句 之后我的许多其他函数都无法正常工作 我试图在每个站点的值排名列表中选择第 8 个和第 23 个位置 以查找每个站点 30 年来每年每天的第 25 个和第 75 个百分位值 我的方法如
  • TensorFlow教程中的next_batchbatch_xs,batch_ys = mnist.train.next_batch(100)来自哪里?

    我正在尝试 TensorFlow 教程 但不明白这一行中的 next batch 来自哪里 batch xs batch ys mnist train next batch 100 我在看 from tensorflow examples
  • Android 中如何读取文本文件? [复制]

    这个问题在这里已经有答案了 我将详细信息保存在 out txt 文件中 该文件已在 data data new android files out txt 中创建了一个文本文件 我可以将信息附加到文本中 但是我无法读取该文件 我使用以下过程
  • 无法在 Android 上选择多个图像上传 - Chrome 网络浏览器

    我想创建一个网络应用程序 用户可以从手机的图片库中选择并上传多个图像 这个功能在iOS上运行良好 但在Android上似乎被破坏了
  • JBoss 4:在哪里部署全局过滤器?

    我想使用 全局 HTTP 过滤器 因此 我编辑了deploy jboss web deployer conf web xml并补充道
  • 模拟Winforms按钮点击动画

    我有一个按钮 按钮内有一个图像控件 当用户单击图像时 我想为按钮设置动画 以便看起来按钮被按下 我并不真正关心实际的按钮按下事件是否触发 这是我想看到的按钮按下的幻觉 注意 我在网上看到的唯一选项涉及直接写入 Windows API 我真的
  • 如何根据简单的多边形绘制图像?

    我想将一个大致矩形区域复制到一个矩形区域 例子 两个区域均由其角点定义 保持大体方向 不翻转等 简单地旋转源图像是行不通的 因为相对边的长度可能不同 到目前为止 我发现没有办法在纯 C 中做到这一点 手动像素复制除外 所以我想我必须求助于
  • 在java中创建指定名称的临时文件

    我有一个 Byte 数组 我想将其内容放入临时文件中 我尝试这样做 try tempFile File createTempFile tmp null FileOutputStream fos new FileOutputStream te
  • 调试时从数据行获取所有列名/列值

    我正在创建一个数据行的模拟实例以进行测试 我尝试从数据库中复制的行包含 37 列 其中包含不同的变量 调试时是否有机会以干净的文本形式获取信息 以便简单地编辑我的模拟对象 我必须调整尼基尔的演员阵容 var colNames dr Tabl
  • 使用 C# 确定谁打开了文件

    使用 C 如何获取有关谁打开了文件的信息 用户名和机器名就足够了 以防万一 我有 Windows 工作站通过 Samba 访问 Linux 文件服务器上的文件 我在工作站上运行的程序中需要此信息 核心 NET 库没有任何方法可以做到这一点
  • 访问指针指向的整数数组时,“sizeof”对不完整类型“int[]”的无效应用

    我正在尝试学习 C 中的指针 并正在编写这个小整数数组指针练习 但遇到了无效的应用程序sizeof不完整类型int 问题 请告诉我哪里出了问题以及如何解决 谢谢 include
  • 在非标准位置安装带有库的 sf 包

    所需的库位于非标准位置 我可以通过以下命令安装 rgdal install packages rgdal type source configure args c with gdal config home programs anacond
  • 您会使用 实现轻量级 XML 解析器吗?

    如果您必须实现一个轻量级 XML 解析器 您会选择使用正则表达式吗 在我的例子中 XML 解析是最简单的 只有标签和文本内容 没有命名空间 没有属性 没有模式支持 当然是在一开始 但也许 我认为学习新的 C 0x 库对我来说是一个很好的练习
  • 将日期中的 NA 替换为另一个日期

    Data DB1 lt data frame orderItemID 1 10 orderDate c 2013 01 21 2013 03 31 2013 04 12 2013 06 01 2014 01 01 2014 02 19 20
  • WAMP服务器呈绿色但只得到404

    好吧 女士们先生们 我有一个很令人困惑的问题 我在工作中的 WIN7 机器上安装了 WAMP 服务器 一切都工作正常 有几个星期没有使用它 因为我被其他事情吸引了 有一天 我尝试启动它 图标是绿色的 我认为我们做得很好 然后我尝试打开 lo
  • 邮件脚本 - 解析错误:语法错误,意外的“=”[关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我正在尝试从包含下拉列表的 html 表单设置一个简单的邮件脚本 但在声明所选变量的行上我收到一条错误消息 解析错误 语法错误 意外的 我
  • 如何手动解密 EncryptedAssertion

    我想解密 EncryptedAssertion 我尝试使用 OpenSaml Decrypter 但它对我不起作用 我无法解密 EncryptedData 我已经问过这个问题了 EncryptedAssertion 解密失败 https s
  • Selenium:遍历元素列表

    我正在使用 XPath CSS 和 Selenium 来定位网站上的元素 我想创建一种方法 在该方法中迭代定位器列表 XPath CSS 程序选择有效的一个 换句话说 它从定位器一开始 如果定位器存在 则返回 true 并存在循环 否则 它