我正在为我编写的RIA进行一些测试自动化,当我尝试在DOM中搜索给定的字符串,然后单击封装所述字符串的DIV时,我遇到了一些麻烦。我正在用黄瓜硒。
我的测试结构如下:
├── app
│ ├── containers
│ │ ├── AddCustomerContainer.java
│ │ ├── HomePageContainer.java
│ │ ├── LoginErrorPageContainer.java
│ │ └── LoginPageContainer.java
│ ├── NaviagtorFactory.java
│ ├── Navigation.java
│ ├── User.java
│ ├── Users.java
│ └── view
│ ├── AddCustomerView.java
│ ├── HomeView.java
│ ├── LoginErrorView.java
│ └── LoginView.java
├── constants
│ ├── Browsers.java
│ ├── CredentialsType.java
│ └── Outcome.java
└── utils
├── BrowserDriver.java
├── BrowserFactory.java
└── FileUtils.java
测试是从Navigation.java
运行的,这就是我尝试搜索字符串然后点击它的父节点的方式:
//Navigation.java
public void given_I_navigate_to_the_add_customer_page(){
BrowserDriver.loadPage("localhost:3000");
AddCustomerView.clickAddCustomer();
}
然后在AddCustomerView.java中:
private static final AddCustomerContainer addCustomerContainer = PageFactory.initElements(BrowserDriver.getCurrentDriver(), AddCustomerContainer.class);
public static void clickAddCustomer(){
LOGGER.info("Navigating to Add Customer");
addCustomerContainer.getAddCustomerButton().click();
}
AddCustomerContainer.java:
@FindBy(how = How.XPATH, using = "//*")
public WebElement all;
public WebElement getAddCustomerButton(){
WebElement button = BrowserDriver.getText(all, "Add customer");
return button;
}
这是BrowserDriver.java中的getText函数
public static WebElement getText(WebElement element, String value) {
return element.findElement(By.partialLinkText(value));
}
我正在搜索的文字是“添加客户”和XPATH // *但是当测试运行selenium时,似乎找不到字符串。
在结构和驱动程序设置方面,一切正常,因为我正在运行其他几个按预期运行的测试。然而,找到一个字符串有点谜。
我尝试了几种获取字符串的方法:
return element.findElement(By.linkText("Add customer"));
return element.findElement(By.partialLinkText("Add customer"));
return element.findElement(By.xpath("//*[contains(text(),'Add customer')]"));
这些都不起作用......有什么建议吗?干杯!
编辑:
这是HTML,值得一提的是,它出现在一个框架中,但是我用chrome来获取xpath,它是//*[@id="login-success"]/p[1]/a[2]
:
<html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>
OATime
</title>
<link href="style.css" rel="stylesheet" type="text/css">
<meta http-equiv="refresh" content="30">
<style type="text/css"></style></head>
<body id="login-success" class="chooser">
<br>
<p align="center">
<strong>version_TOKEN</strong>
<br>
<br>
<a target="main" href="/customer-list" class="screenlink">List customers</a><br>
<a target="main" href="/customer-edit" class="screenlink">Add customer</a><br>
<br>
<a target="_top" href="/logout" class="screenlink">Sign out</a>
</p>
</p>
</body></html>
答案 0 :(得分:1)
使用selenium,您需要在目标元素所在的框架上设置上下文。所以在你的情况下它应该是这样的:
each
在完成框架后,设置回默认上下文:
@FindBy(how = How.XPATH, using = "//*")
public WebElement all;
public WebElement getAddCustomerButton(){
BrowserDriver.switchTo().frame(0);
WebElement button = BrowserDriver.getText(all, "Add customer");
return button;
}