当前位置: 首页 > 面试题库 >

Selenium的ByChained类是如何工作的?

怀宇
2023-03-14
问题内容

我对ByChained类的文档中提到的内容非常困惑。它说:

用于使用一系列其他查找在文档中定位元素的机制。此类将找到按顺序与每个定位器匹配的所有DOM元素,例如driver.findElements(new
ByChained(by1,by2))将找到与by2匹配的所有元素,并出现在与by1匹配的元素下面。

selenium在code.google.com上也存在一个问题,该问题是为ByChained类提出的,有人在评论中说,它旨在用于通过多个定位符查找元素/元素。

我不明白
为什么by1和by2是两个不同元素的定位符?当我初次接触该类时,我觉得它将通过使用不同的定位器来帮助定位元素。因此,如果一个定位器不起作用,则下一个定位器将起作用。但是,当我实际使用此类时,它的行为非常奇怪,并一直抛出NoSuchElementException。

例如,如果我的html是:

<html>
  <body>
    <div id="details">
      <input id="firstName" class="personName" type="text"/>
    </div>
  </body>
</html>

我想在ByChained中使用两个定位符来查找输入字段:
1.使用By.id("firstName")
2.使用By.className("personName")

所以我的代码变成:

By myBy = new ByChained(By.id("firstName"),By.className("personName"));
driver.findElement(myBy);

在执行时,我得到了NoSuchElementException。我期望如果我的第一个By不起作用,那么它将在系列中找到带有下一个By的元素。

有人可以通过一个示例解释此类的工作原理,以及可以在哪种情况下使用该类吗?


问题答案:

此类的作用是允许您使用dom中的层次结构来定位元素。

可以说由于某种原因您拥有以下html:

<html>
    <body>
        <div id="details">
            <input id="firstName" class="personName" type="text"/>
        </div>
        <input id="firstName" class="personName" type="text"/>
    </body>
</html>

并且您想要获得div之间的元素,而不是单独获得的元素。您可以使用ByChained by通过执行以下操作来指定所需的元素:

new ByChained(By.id("details"),By.id("firstName"));

发生的情况是,它找到第一个元素,然后在dom层次结构中的该元素下搜索列表中下一个选择器。基本上,此By只是一种不再需要执行以下操作的好方法:

details = driver.findElement(By.id("details"));
input = details.findElement(By.id("firstName"));


 类似资料:
  • 我目前有大量的情况需要验证页面(及其所有元素)是否正确显示。WebElement的方法似乎是实现这一目的的合理方法,但是我想确切地理解这个方法是如何确定元素是否“显示”的。javadoc对该方法的内部工作方式没有任何了解,而web上的其他信息充其量也是稀疏的。 如果有人能提供这种方法如何工作的详细描述,我将不胜感激。

  • 应用程序具有上下文路径-->/spring-form-simple-project 因此,为了访问,我使用: 这个控制器又返回student.jsp,当提交这个student.jsp时,它用-->@RequestMapping(value=“/AddStudent”,method=RequestMethod.post)调用controller 任何关于这通常如何工作的指示都将是有帮助的。 谢谢!

  • 本文向大家介绍hibernate 是如何工作的?相关面试题,主要包含被问及hibernate 是如何工作的?时的应答技巧和注意事项,需要的朋友参考一下 读取并解析配置文件。 读取并解析映射文件,创建 SessionFactory。 打开 Session。 创建事务。 进行持久化操作。 提交事务。 关闭 Session。 关闭 SessionFactory。

  • 我很想知道谷歌应用商店服务中的Activity认可是如何工作的? 我认为活动是通过加速计数据识别的。是这样吗?。请告诉我详细情况如何

  • 我对GridBagLayout这一主题不熟悉,我无法理解约束、重量和填充之间的确切区别。 我可以而不分配。 除非您指定了至少一个非零值,否则所有组件都会聚集在其容器的中心。这是因为当权重为0.0(默认值)时,GridBagLayout会在其单元格网格和容器边缘之间放置任何额外的空间。 我的问题是,如果这是真的,那么为什么组件之间没有空间,它们看起来是连接的?

  • 从@mock和@injectmocks之间的差异,我理解@injectmocks被用作创建实例的注释,并将用@mock创建的mock注入其中。我想我不明白它是怎么工作的。 以下是我的问题: 在中,当我调用时,它返回一个空集...我的问题是:为什么不抛出(只声明mockedappoinceptions)?也许因为这是一个嘲弄?如果原因是这样,为什么模拟不抛出“NullPointerException