RobotFramework/Java-1st arg can';不要强制使用org.openqa.selenium.WebElement

RobotFramework/Java-1st arg can';不要强制使用org.openqa.selenium.WebElement,java,robotframework,selenium2library,Java,Robotframework,Selenium2library,我正在尝试使用下面的简单Java函数,并将这个库调用到Robotframework中。这使我犯了错误。博客中的相关问题并非特定于RF。有人请帮我处理这件事 import org.openqa.selenium.WebElement; public class GoForward { public static final String ROBOT_LIBRARY_SCOPE = "GLOBAL"; public WebElement moveForward(WebElement element

我正在尝试使用下面的简单Java函数,并将这个库调用到Robotframework中。这使我犯了错误。博客中的相关问题并非特定于RF。有人请帮我处理这件事

import org.openqa.selenium.WebElement;

public class GoForward {
public static final String ROBOT_LIBRARY_SCOPE = "GLOBAL";
public WebElement moveForward(WebElement element){
    element.click();
    return element;
}
}
机器人框架代码:

 *** Settings ***
Library  Selenium2Library
Library  keywords.Storetexts
Library  keywords.GoForward
*** Keyword ***
Click Forward Button
  move forward  ${forward_button}
  sleep  2s
错误:

TypeError: moveForward(): 1st arg can't be coerced to org.openqa.selenium.WebElement

错误说明了问题所在-方法的参数应该是WebElement类型,但您传递的是不同的内容。
${forward\u button}
的值是多少,如何设置它?这是问题的根源-您正在传递一个定位器字符串,而该方法需要一个WebElement对象。在Java中执行click()之前,必须找到并转换它。你知道,如果你用robotframework语法创建关键字会容易得多。在我看来,我猜在你的向前移动函数中,你在等待一个WebElement,而在这里你正在发送一个字符串定位器。。您可以将函数的参数更改为“String”,您可以使用它来定位WebElement。是的,定位器定义为字符串;使用Selenium2库时,robotframework支持定位器(作为字符串)和WebElement对象。如果要将字符串转换为后面的字符串,请使用关键字
Get Webelement
。但是接下来,您将遇到另一个麻烦-如果您想在java中使用关键字,您必须在那里获得selenium库的实例,并进行重用-因此您的关键字将在同一个SE会话中交互。这是一个不同的主题-在文档中有很好的解释。不要这样做,除非你有令人信服的理由这样做。Robotframework是一个功能强大、用途广泛的框架,98%的操作都可以通过内置功能或标准库来完成。如果使用标准库使用RF语法,那么浏览器交互肯定比使用java容易得多;尤其是像这样的琐碎任务。