我的问题是我无法找出 FluentLenium 中选择器 XPath(selenium) 的等价物。
谢谢你。
在我看来,FluentLenium 没有等效的 By.xpath(By.id 等),因为它仅依赖于 CssSelector。
因为您可以使用自定义过滤器:
包含 containsWord notContains startsWith notStartsWith endsWith notEndsWith
我个人认为没有任何理由使用 XPath。此外,XPath 通常被认为是定位 Web 元素的“坏习惯”。
是的!在 FluentLenium 3.4.0 中,它们具有 @FindBy 注释,可让您通过 xpath 找到 FluentWebElements。
import org.fluentlenium.adapter.junit.FluentTest;
import org.fluentlenium.core.FluentPage;
import org.fluentlenium.core.annotation.Page;
import org.fluentlenium.core.annotation.PageUrl;
import org.fluentlenium.core.domain.FluentWebElement;
import org.junit.Test;
import org.openqa.selenium.support.FindBy;
@PageUrl("http://www.kennethkuhn.com/")
class Simple extends FluentPage {
@FindBy(xpath = "/html/body/table/tbody[5]/tr/td[1]/center/a[1]/b/font")
FluentWebElement element;
public void enterMuseum(){
element.click();
}
}
public class test extends FluentTest {
@Page
Simple page;
@Test
public void testStuff(){
goTo(page).enterMuseum();
}
}
PS:有时 xpath 非常有用,例如,当您正在处理一堆具有类似前端的遗留应用程序时,这些应用程序永远不会改变(每个应用程序的 id/name/class 都不同)但仍需要测试,因为后端的东西仍然可以在修订时破坏。虽然,如果您正在测试的 Web 应用程序发生了轻微的变化,尽管您的所有 xpath 很有可能都会中断,并且将所有内容锚定到 DOM ID 肯定会更好。