实际上我想获得一个@FindBy
用于页面对象模式的元素。
我有 2 个类,第一个是我命名TestPage
的页面对象,第二个是命名的PageSaveTest
(我的测试发生的地方并调用TestPage
)。
我也尝试过使用@FindBy
withxpath
和id
。
>> 这是我的测试页
import java.util.List;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.support.FindBy;
public class TestPage {
// get autocomplete input
@FindBy(css = "input[id*='supplierOps_input']")
private WebElement autocompleteSupplierOps;
// getter
public WebElement getAutocompleteSupplierOps() {
return autocompleteSupplierOps;
}
}
>> 这是我的 PageSaveTest
// How i "inject" my TestPage
@Page
TestPage testpage;
[...]
// My test
WebElement autocomplete = testpage.getAutocompleteSupplierOps();
String keys = "OP";
autocomplete.sendKeys(keys); // >>>>>>> Error throwed here !
List<WebElement> listSugg = testpage.getSuggestionsSupplierOps();
错误信息 :
org.openqa.selenium.NoSuchElementException : Returned node was not an HTML element.
我的想法 :
我认为麻烦来自于@FindBy
. 但是我使用这个例子来构建我的 TestPage 和我的测试以及这个。
问题:有人可以向我解释如何@FindBy
在我的示例中使用和使用吗?石墨烯的文档真的很差。
编辑 :
我已经在TestPage(上图)中修改了我的 getter,我尝试过简单打印 id 属性值,例如
public WebElement getAutocompleteSupplierOps() {
System.out.println(">>>> "+autocompleteSupplierOps.getAttribute("id"));
return autocompleteSupplierOps;
}
但仍然是同样的错误,@FindBy
被搞砸了。
在此问题中添加的另一个 @FindBy 规范。
更新 :
我已经修复了我的选择器,但实际上驱动程序会话存在问题,例如:
page2.getAutocompleteSupplierOps();
PAGE 1 ----------------------------------> PAGE 2
driver id:1 ----------------------------------> driver id:2
driver.showPageSource() is empty
return no element found <---------------------- driver.findElement() -> not found
我使用了 3 种不同的方式,the @FindBy
,the@Drone WebDriver
最后是@Lukas Fryc
对我建议的方式。