实际上,我希望获得一个@FindBy元素,该元素用于Page模式。
我有两个类,第一个类是我的页面对象,名为TestPage,第二个类名为PageSaveTest (我的测试在这里进行并调用TestPage)。
我还尝试将@FindBy与xpath和id结合使用。
>>这是我的TestPage
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的工作原理和在我的例子中的用法吗?关于Graphene的文档非常贫乏。
编辑:
我在TestPage中修改了getter,我尝试了一个id属性值的简单打印,如
public WebElement getAutocompleteSupplierOps() {
System.out.println(">>>> "+autocompleteSupplierOps.getAttribute("id"));
return autocompleteSupplierOps;
}但是同样的错误,@FindBy是f*加起来的。
另一个@FindBy spec在此问题中添加。
最新情况:
我已经修复了我的选择器,但是实际上有一个关于驱动程序会话的问题,比如:
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种不同的方式,@FindBy,@Drone WebDriver,以及@Lukas Fryc给我的建议。
发布于 2013-04-30 05:19:31
与使用WebElement注入@FindBy不同,您可以直接使用驱动程序:
WebDriver driver = GrapheneContext.getProxy(); // this will be removed in Alpha5 version, use `@Drone WebDriver` instead
WebElement autocompleteSupplierOps =
driver.findElement(By.css("input[id*='supplierOps_input']"));但是它应该给出与@FindBy相同的结果--但是它将检查这个问题是否是由注入引起的,但是还出现了一些其他问题。
您可能有错误的CSS选择器-支持CSS选择器取决于使用的浏览器及其版本。
您要查找的节点不必在页面中,您可能需要等待,然后使用等待API或请求保护来显示它。
最佳实践是在开发中使用远程可重用会话和真正的浏览器--它可以快速发现原因。
发布于 2017-08-16 22:24:24
我认为,与其使用@FindBy(css ="..."),不如尝试@FindBy(xpath="..."),我发现它更可靠。
https://stackoverflow.com/questions/16274596
复制相似问题