Rac*_*oon 5 java selenium xpath pageobjects selenium-webdriver
我正在尝试在Java中使用Page Object模式,并且@ FindBy / XPath遇到了一些麻烦。
之前,我在Groovy中使用了以下构造:
driver.findElement(By.xpath("//td[contains(text(),'$SystemName')]")).click()
Here, SystemName is a parameter that can be different.
Run Code Online (Sandbox Code Playgroud)
现在,我想做同样的事情,但是要遵循Java中的Page Object范式:
public class ManagedSystems {
private WebDriver driver;
@FindBy(id="menu_NewSystem")
private WebElement menuNewSystem;
@FindBy (xpath = "//td[contains(text(),'$SystemName')]") // ??? How to use SystemName from deleteSystem method (below)?
private WebElement plantSystemName;
....
public SystemHomePage deleteSystem (String systemName) {
plantSystemName.click();
}
}
Run Code Online (Sandbox Code Playgroud)
在测试中,我调用deleteSystem:
SystemHomePage.deleteSystem("Firestone");
Run Code Online (Sandbox Code Playgroud)
问题:如何为PlantSystemName和为deleteSystem指定的SystemName链接@FindBy表示法?
谢谢浣熊
小智 6
我为此使用了另一种解决方法,即使使用页面工厂,它也允许我们使用动态 xpath。
解决方案:添加任何静态父元素的 xpath,并使用动态路径引用子元素。在您的情况下,//td[contains(text(),'$SystemName'),td 的父元素可能是 'tr' 或 'table'。如果表是静态的,请使用以下代码:
@FindBy(xpath = "<..table xpath>")
public WebElement parentElement;
public WebElement getDynamicEmement(String SystemName){
parentElement.findElement(By.xpath("//tr/td[contains(text(),'"+SystemName+"')]"))
}
Run Code Online (Sandbox Code Playgroud)
现在在您的脚本中,首先访问表(以便将其引用加载到内存中),然后调用 getDynamicElement 方法。
waitForElement(parentElement)
getDynamicElement("System-A")
Run Code Online (Sandbox Code Playgroud)
感谢 Ardesco 和 Robbie,我想出了以下解决方案:
private String RequiredSystemNameXpath = "//td[contains(text(),'xxxxx')]";
private WebElement prepareWebElementWithDynamicXpath (String xpathValue, String substitutionValue ) {
return driver.findElement(By.xpath(xpathValue.replace("xxxxx", substitutionValue)));
}
public void deleteSystem (String systemName) {
WebElement RequiredSystemName = prepareWebElementWithDynamicXpath(RequiredSystemNameXpath, systemName);
RequiredSystemName.click();
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
15960 次 |
最近记录: |