当前位置: 首页 > 知识库问答 >
问题:

如何通过除“class”和“name”(例如“title”)之外的属性直接查找Web元素

钦高峯
2023-03-14

我对Java和Selenium很陌生,如果我的问题听起来有点初级,我提前道歉。

我使用:

driverChrome.findElements(By.className("blabla"));

查找以“blabla”作为其类名称的元素,例如:

<span class="blabla" title="the title">...</span>

现在,如果我想通过其他属性查找所有元素呢?类似于:

driverChrome.findElements(By.titleValue("the title"));

这是我当前用于执行此任务的代码:

List<WebElement> spans = driverChrome.findElements(By.tagName("span"));

for (WebElement we : spans) {

    if (we.getAttribute("title") != null) {
            if (we.getAttribute("title").equals("the title")) {
                    ...
                    break;
            }
    }

}

但它并不快速,也不好用。

共有3个答案

楚嘉玉
2023-03-14

您也可以使用CSS定位器来实现这一点。

通过CSS选择器(“span[title='the title']”)

据说CSS选择器速度更快。

我们在实践中介绍了Selenium WebDriver中的一些定位技术:http://selenium-webdriver-in-practice.github.io

程瑞
2023-03-14

可以使用xpath实现

driverChrome.findElement(By.xpath("//*[@yourAttribute='value']"));

例如:

driverChrome.findElement(By.xpath("//*[@title='the title']"));
穆远
2023-03-14

使用XPath归档元素时有许多方法

<html>
  <body>
     <div>
       <form>
          <input id="demo"/>
       </form>
     </div>
   </body>
 <html>

获取“输入”标签

xpath="/html/body/div/form/input"
<html>
  <body>
     <div>
       <form>
          <input id="demo"/>
       </form>
     </div>
   </body>
 <html>

获取“输入”标签

xpath="//input"  
<html>
  <body>
     <div>
       <form>
          <input id="demo1"/>
          <input id="demo2"> 
       </form>
     </div>
   </body>
 <html>

获取输入“demo2”

xpath=“//输入[1]”

<html>
  <body>
     <div>
       <form>
          <input id="demo1"/>
          <input id="demo2" foo="bar"> 
       </form>
     </div>
   </body>
 <html>

获取输入“demo2”

xpath="//input[@id='demo2']" (equivalent to By.id)

xpath="//input[@foo='bar']"
<html>
    <body>
     <div>
       <form>
          <input id="1" type="submit" />
          <input id="2" foo="bar"/>
          <input id="3" type="submit" foo="bar"/> 
       </form>
     </div>
   </body>
 <html>

获取第三个输入

xpath="//input[@type='submit'][@foo='bar']"

xpath="//input[@type='submit' and @foo='bar']"

如果使用xpath=“//输入[@type='submit'或@foo='bar]”,您将得到一个数组。你可以按驱动程序获取列表。findElements(By.xpath(xpath))(java)。否则,您将获得第一个元素(如果您只使用driver.findElement)。因为所有3个输入元素都满足条件“or”,它给出了第一个条件。

<html>
    <body>
     <div>
       <form>
          <input id="1" type="submit" />
          <input id="2" foo="bar" daddy="dog"/>
          <input id="3" type="submit" foo="bar"/> 
       </form>
     </div>
   </body>
 <html>

来获取第二个输入

xpath="//input[@daddy]"

因为只有第二个有“爸爸”属性

 <html>
    <body>
     <div>
       <form>
          <input id="input1" daddy="dog" />
          <input id="input2" daddy="pig"/>
       </form>
     </div>
     <div>
       <form>
          <input id="input3" daddy="dog" />
          <input id="input4" daddy="apple"/>
       </form>
     </div>
   </body>
 <html>

获得第二个div

xpath="//div[.//input[@daddy='dog'] and .//input[@daddy='apple']]"

总的来说,这些是我现在能解决的全部问题。希望有帮助。

 类似资料:
  • 问题内容: 我的网页中有3个单选按钮,如下所示: 在jQuery中,我想在单击这三个按钮中的任何一个时获取所选单选按钮的值。在jQuery中,我们有id(#)和class(。)选择器,但是如果我想按名称查找单选按钮,该怎么办呢? 请告诉我如何解决这个问题。 问题答案: 应该做到这一点,所有这些都在文档中,该文档具有与此类似的示例: 我还应该注意,您在该代码段中有多个相同的ID。这是无效的HTML。

  • 一个球形的空间区域充满了特定分布的更小、不同大小的球体。每个球体都与一些物理特性相关联:位置、半径、质量、速度和ID都表示为1d或3d阵列。我想以一种完全随机的方式洗牌这些球体,这样任何一个球体都会保留它的所有属性,除了它的3d位置数组。我在这里遇到过类似的问题(随机洗牌列,第一列除外),但是,有没有一种简单而快速的python方法可以在不使用DataFrame的情况下做到这一点? 谢谢你的帮助。

  • 问题内容: 我有一些如下所示的元素: 如何向属性值为(零)的元素添加类? 我尝试了许多不同的解决方案,但没有任何效果。一个例子: 任何的想法? 问题答案: 使用属性等于选择器 它在树上起作用 获取当前匹配元素集中每个元素的后代,并通过选择器,jQuery对象或元素进行过滤。

  • 问题内容: python + selenium是否有任何方法可以找到父元素,兄弟元素或子元素,就像 或 或 ? 例如: 我已经尝试过如下操作,但是失败了: 如何 获取输入元素的父级, 然后最终 选择选项 ? 问题答案: 您可以使用xpath 找到一个父元素: 为获得选择的选项制作一个单独的xpath怎么样,像这样:

  • 问题内容: 我有两个域,是一对多关系中的一部分。我想知道如何查询孩​​子的父母FK吗?贝娄是父母/孩子的伪代码 上级: 儿童: 尽管我没有明确创建FK,但是grails会自行创建MySQL数据库。但是,当我想像这样通过FK查询孩子时: 我收到一个错误:找不到类[class mgr.AlumLanguage]的名称[alumProfileId]的属性 关于如何做到这一点的任何建议? 谢谢杰森 问题答

  • 问题内容: 工作代码1: 工作代码2: 问题答案: 初始选择器的问题是缺少选择器的前面。在告诉XPath来搜索整个HTML树。 这应该可以解决问题: 如果要查找元素的子代,请改用,例如 如果要查找包含 文本 而不是href属性的链接,则可以使用