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

是否可以通过具有WebElement的对象获取

曹鸿风
2023-03-14

我正在使用@FindBy注释来定位WebElements。但是我想在方法中使用这些WebElement作为参数。只有在页面上找到WebElement,我才能成功地使用它。但如果我想等待它,我必须使用By(使用相同的定位器)。

例如。

private static final String SEARCHFIELD_LOC = "#search input[placeholder]";
@FindBy(css = SEARCHFIELD_LOC)
public WebElement searchField;
public By searchField_by = new By.ByCssSelector(SEARCHFIELD_LOC);

这样,我就可以在某些方法中使用这个WebElement作为By对象,比如

public boolean isElementDisplayedWithWait(final By by) { .... }

对于每个元素,我有4行代码。我很懒,正在寻找一种简化的方法。

共有2个答案

魏鸿
2023-03-14

在QAF(以前称为ISFW)中的扩展webelement中可以使用webelement本身的等待/断言/验证方法。例如:

@FindBy(css = SEARCHFIELD_LOC)
public WebElement searchField;

searchField.waitForPresent();
searchField.assertPresent(); //auto wait
searchField.verifyPresent(); //auto wait

参考:

  1. QAF硒测试框架
扶冠宇
2023-03-14

我找到了完全不同的解决办法。我将我的定位器存储为字符串。

public String searchField = ".slide.slide_search input[placeholder]"

所以每个定位器只有一行代码。我希望只支持CSS定位器就足够了。我不会使用@FindBy获取WebElements。相反,我将使用特殊的方法获取WebElements,该方法将等待element并记录正在发生的事情。我将实现如下方式获取WebElement:

WebElement we = wait.until(ExpectedConditions.visibilityOfElementLocated(new By.ByCssSelector(locator)));

等待在哪里

Wait<WebDriver> wait = new FluentWait<WebDriver>( driver )
                .withTimeout(timeout, TimeUnit.SECONDS)
                .pollingEvery(1, TimeUnit.SECONDS)
                .ignoring( StaleElementReferenceException.class ) ;
 类似资料:
  • 问题内容: 如何从HashMap的位置检索元素,这有可能吗? 问题答案: HashMap不保留排序: 此类无法保证地图的顺序。特别是,它不能保证顺序会随着时间的推移保持恒定。 看一下LinkedHashMap,它保证了可预测的迭代顺序。

  • 问题内容: 我期待的是类似WebElement.isfocus()的东西,…确实很简单,但是我发现的唯一方法是使用 伪类。 这真的是不常见的任务,例如找不到大量信息吗? 我知道这个SO主题,但是距那时已经快两年了。最新版本中没有新内容吗? 您知道一些解决方法吗? 问题答案: 还有另一个主题涉及这个问题:使用SeleniumWebdriver测试元素是否为焦点 基本上,代码将是

  • 我使用了以下代码, 这会引发错误“表达式不是合法表达式”。“代码:“12”nsresult:“0x805b0033(SyntaxError)”位置:”“]”。 当我缩小搜索范围到 它工作正常,我得到了特定行中的所有文本。然而,当我将其扩展到特定于第1个代码中所示的列时,我得到了错误。 html代码段,

  • 我计划开发一个基于web的聊天应用程序,它接收ReSTful请求,将它们转换为XMPP,并将它们发送到XMPP服务器。 在这种基于聊天的应用程序中使用WebSocket看起来很有希望,因为事件(或响应)可以异步传递。但是,如果我使用WebSocket作为从浏览器传输请求的底层协议,这仍然可以被视为ReSTful设计吗?如果是的话,URI、动词(GET、POST…)是怎样的,websocket消息中

  • 问题内容: 有没有一种方法可以检查垃圾收集器是否可以提取对象? 在我的代码中的某个地方,我有一个对象的引用: 然后,通过Eclipse Debugger,获得对象的存储位置。之后,我将引用设置为null: 有什么方法可以检查以前引用的对象现在是否适合垃圾回收,或者是否有其他引用? 非常感谢, 斯特凡 问题答案: 您无法在运行时使用任意对象执行此操作,实际上,不可能完全确定地执行此操作。但是,有两种

  • 问题内容: 我正在尝试从Wikipedia主页提取所有链接,但是此代码显示TypeError:“ WebElement”对象不是可迭代的错误。 问题答案: 问题是您正在使用哪个仅返回一个WebElement(不可迭代),即返回一个WebElement列表。 解决方案:替换为 参考:Selenium-Python文档