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

FindBy属性何时触发driver.FindElement?

甄阳朔
2023-03-14
问题内容

我的问题是:装饰有findby属性的Webelements是否在每次引用它们时调用findelement函数?如果没有,什么时候?

用List 装饰的程序是什么?当您引用列表或引用列表中的元素时,它会触发吗?

我之所以问是因为,在某些情况下,我会遇到过时的元素异常,并且我想知道如何处理它们。


问题答案:

WebElement的计算是惰性的。也就是说,如果您从不在PageObject中使用WebElement字段,则永远不会调用它的“
findElement”。参考。

如果不想WebDriver每次都查询元素,则必须使用@CacheLookup注释。

那我的问题清单部分呢?

从列表中查询时将触发findElements。说您有:

@FindBy(xpath = "//div[@class=\"langlist langlist-large\"]//a")
private List<WebElement> list;

以下代码示例均 触发 findElements:

list.isEmpty();

WebElement element = list.get(0);

在哪里

List<WebElement> newList = new ArrayList<WebElement>();
newList = list;

不会触发 findElements()。

请检查LocatingElementListHandler课程。我建议深入探讨答案。

您可能会发现PageFactory类中的以下代码注释有帮助:

/**
   * Instantiate an instance of the given class, and set a lazy proxy for each of the WebElement
   * and List<WebElement> fields that have been declared, assuming that the field name is also
   * the HTML element's "id" or "name". This means that for the class:
   * 
   * <code>
   * public class Page {
   *     private WebElement submit;
   * }
   * </code>
   * 
   * there will be an element that can be located using the xpath expression "//*[@id='submit']" or
   * "//*[@name='submit']"
   * 
   * By default, the element or the list is looked up each and every time a method is called upon it.
   * To change this behaviour, simply annotate the field with the {@link CacheLookup}.
   * To change how the element is located, use the {@link FindBy} annotation.
   * 
   * This method will attempt to instantiate the class given to it, preferably using a constructor
   * which takes a WebDriver instance as its only argument or falling back on a no-arg constructor.
   * An exception will be thrown if the class cannot be instantiated.
   * 
   * @see FindBy
   * @see CacheLookup
   * @param driver The driver that will be used to look up the elements
   * @param pageClassToProxy A class which will be initialised.
   * @return An instantiated instance of the class with WebElement and List<WebElement> fields proxied
   */


 类似资料:
  • 问题内容: 有什么方法可以在属性更改时触发事件(可能是自定义的)? 比方说,当IMG src更改或DIV的innerHtml吗? 问题答案: 注意:突变事件已从标准中删除,现已弃用。有关如何使用其替代内容的信息,请参见其他答案或文档。 您指的是DOM突变事件。浏览器对这些事件的支持较差(但正在改善)。jQuery的MutationEvents插件可能会为您提供一些帮助。

  • 我最近开始使用带有Page对象模式的Selenium2和Page Factory。我使用@FindBy注释声明了WebElements,这些注释在初始化类时由PageFactory初始化。但是,我希望将@findby注释与locators.properties文件一起使用。不幸的是,我似乎无法做到这一点,因为注释被限制为只允许常量表达式。一般来说,这似乎是Java注释的一个限制,但我只是想知道是否

  • 问题内容: 我的整个项目都使用(Bluebird)Promises,但是有一个使用EventEmitter的特定库。 我想要实现以下目标: 我在Promises链中读了EventEmitter的答案。这给了我一种执行’connect’事件的回调的方法。这是我到目前为止所到之处 现在如何进一步链接“ eventB”? 问题答案: 我假设您想为每个事件做不同的事情。即使由的动作触发,您也可以将其视为另

  • 问题内容: 这是我在React中经常遇到的问题。保证在首次渲染组件时会触发该方法,因此似乎很自然地进行高度和偏移之类的DOM测量。但是,在组件生命周期的这一点上,很多时候我收到错误的样式读数。该组件 是 在DOM,当我与调试器打破,但它尚未在屏幕上绘制。我将宽度/高度大部分设置为100%的元素遇到了这个问题。当我进行测量时-一切正常,但是此方法在组件的初始渲染时不会触发。 所以我的问题是-何时确切

  • 本文向大家介绍a标签的href和onclick属性同时存在时哪个先触发?相关面试题,主要包含被问及a标签的href和onclick属性同时存在时哪个先触发?时的应答技巧和注意事项,需要的朋友参考一下 应该是属性先触发,判断依据是在中使用方法可以阻止标签的跳转,说明标签的跳转行为是一个默认行为;如下:

  • 问题内容: 我有一个使用一些临时属性foo的域类。现在,我想在此属性上使用listOrderByFoo,但出现错误“无法解析属性:foo”。有什么方法可以在listOrderByProperty()或findByProperty()中使用瞬态属性吗? 问题答案: 抱歉不行。就像Matt在对您的问题的评论中说的那样,由于这些字段被标记为临时字段,因此它们不会持久保存到数据库中,因此您无法查询它们。如