首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >@FindBy与Arquillian Graphene

@FindBy与Arquillian Graphene
EN

Stack Overflow用户
提问于 2013-04-29 08:48:02
回答 2查看 1K关注 0票数 0

实际上,我希望获得一个@FindBy元素,该元素用于Page模式。

我有两个类,第一个类是我的页面对象,名为TestPage,第二个类名为PageSaveTest (我的测试在这里进行并调用TestPage)。

我还尝试将@FindByxpathid结合使用。

>>这是我的TestPage

代码语言:javascript
复制
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

代码语言:javascript
复制
// 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();

错误消息:

代码语言:javascript
复制
org.openqa.selenium.NoSuchElementException : Returned node was not an HTML element.

我的想法:

我认为麻烦来自于@FindBy。但是我使用这个例子来构建我的TestPage、测试和这个也是

问题:能给我解释一下@FindBy的工作原理和在我的例子中的用法吗?关于Graphene的文档非常贫乏。

编辑:

我在TestPage中修改了getter,我尝试了一个id属性值的简单打印,如

代码语言:javascript
复制
public WebElement getAutocompleteSupplierOps() {
  System.out.println(">>>> "+autocompleteSupplierOps.getAttribute("id"));
  return autocompleteSupplierOps;
}

但是同样的错误,@FindBy是f*加起来的。

另一个@FindBy spec在此问题中添加。

最新情况:

我已经修复了我的选择器,但是实际上有一个关于驱动程序会话的问题,比如:

代码语言:javascript
复制
             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给我的建议。

EN

回答 2

Stack Overflow用户

发布于 2013-04-30 05:19:31

与使用WebElement注入@FindBy不同,您可以直接使用驱动程序:

代码语言:javascript
复制
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或请求保护来显示它。

最佳实践是在开发中使用远程可重用会话和真正的浏览器--它可以快速发现原因。

票数 2
EN

Stack Overflow用户

发布于 2017-08-16 22:24:24

我认为,与其使用@FindBy(css ="..."),不如尝试@FindBy(xpath="..."),我发现它更可靠。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16274596

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档