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

@CacheLookup如何在WebDriver中工作?

公风史
2023-03-14
问题内容

我不确定我是否了解缓存原理:

@CacheLookup
@FindBy(how = How.ID, using = namespace + signifLvl)
private WebElement sigLvl;

如果使用这种注释方式,则将使用ElementLocator,并且第一次引用该字段时,将driver.findElement(by)通过ElementLocator
找到并缓存该元素,以便下次我们引用它时,将从缓存中将其返回。

它看起来取决于ElementLocator和PageObject实例的生存期。

而且它与直接driver.findElement(By);呼叫无关。

我假设,WebElement就像元素的指针/引用,对吗?这样,如果元素在浏览器中发生更改,它将立即反映到WebElement中。就像JavaScript中一样。因为有关元素状态的所有RemoteWebElement方法都在执行对浏览器的命令/请求。

这样更改甚至可以反映在缓存的元素中,对吗?


问题答案:

恕我直言,问题应该是:元素指针/ id是关于什么的?

由于WebElement没有状态,因此仅调用浏览器的方法。例如,@ CacheLookup仅是public WebElement el = driver.findElement(By);初始化WebDriver的PageObject时的快捷方式。

拥有实例后,您将执行其方法,即调用浏览器。

WebElement ID对应于JS元素实例。如果您在客户端JS上执行以下操作:

var node1 = document.createElement('a');

然后将其附加到某个地方,从那里删除它,再附加到其他地方,依此类推,并且它仍然是相同的node1实例,WebElement实例仍然指向node1元素,因为它是相同的JS节点实例。



 类似资料:
  • 问题内容: 我得到了一个包含8个以上Webdriver-Sampler和一个变量 的Testscript ,这些变量在某些Webdriver-Sampler中有所变化。 例如: 第一采样器: status =“登录成功” 第二采样器: status =“登录成功,搜索失败” 第三个采样器: status =“登录成功,搜索失败, 注销成功” 因此,我必须每次都传递变量,然后编辑该变量。我知道 可以

  • 问题内容: 当前,在很多情况下,我需要验证页面(及其所有元素)是否正确显示。WebElement 的方法似乎是执行此操作的逻辑方法,但是我想精确地了解此方法在确定是否“显示”元素时正在做什么。所述的Javadoc不会洒在幅材上的方法和其它信息的内部工作的任何光出现在最好是稀疏的。 如果有人能提供这种方法的详细说明,我将不胜感激。 问题答案: WebDriver有其自己的W3C规范。 确定可见性的部

  • 这个宣言是什么意思? 这意味着什么?请帮忙。

  • 我正在脚本中使用库: 它可以让我的Selenium WebDriverHibernate一秒,但怎么可能是250毫秒呢?

  • 我正在使用Selenium作为网络爬虫,它在大多数情况下运行良好,但一些网站可以检测到它,所以我决定深入学习。 经过一番搜索,我找到了"ChromeDevTools协议"和"Json Wire协议"。 “Json Wire Protocol”在Selenium和Webdriver之间工作,作为Python Java C#和其他语言的实现,因此它们可以通过统一协议与Webdriver通信,几篇文章解

  • 我创建了一些Selenium IDE脚本,然后将脚本导出Java /Junit4WebDrier支持的,只是简单的WebDrier类。当我运行这些类时,测试用例所做的唯一事情就是打开正确的URL。之后,测试用例是登录测试用例,它根本找不到用户名字段。我尝试通过名称或ID两者都没有工作。我甚至尝试添加一些方法来等待页面加载(实际上加载没有问题);我希望通过名称或id部分工作,至少最后尝试块使用我在网