gpt4 book ai didi

java - 在java中使用firefox webdriver从当前节点获取Xpath

转载 作者:行者123 更新时间:2023-12-01 22:26:05 25 4
gpt4 key购买 nike

因此,我在使用 findElement(By.xpath("...")) 时遇到了一个小性能问题

首先,我找到一个 ul 元素,其中包含大约 20 个 li 子元素。通过在每个子项上使用 then,我使用以下命令找到信息的内部 xpath:

List<WebElement> addrBookNames = driver.findElements(By.xpath("//ul[@class='displayAddressUL']"));
for(WebElement addr : addrBookNames)
{
String fullName = addr.findElement(By.xpath("li[@class='AddressFullName']/b")).getText();
String addressLine = addr.findElement(By.xpath("li[@class='AddressAddressLine']")).getText();
String city = addr.findElement(By.xpath("li[@class='AddressCity']")).getText();
String county = addr.findElement(By.xpath("li[@class='country']")).getText();
String phoneNumber = addr.findElement(By.xpath("li[@class='phone']")).getText();

}

上面的代码大约需要 5 秒,使用以下命令检查:

double stime = System.currentTimeMillis();
double TotalTime = System.currentTimeMillis() - stime;

之前和之后。

我从所选节点提取内部 xpath 的方式有什么问题吗?

最佳答案

1) 我会尝试作为替代 CSS 选择器方法并创建 5 个 WebElement 列表(已经在搜索字段的分割表示中):

List<WebElement> fullNames = driver.findELements(By.cssSelector("ul.displayAddressUL li.AddressFullName>b"));
List<WebElement> addressLines= driver.findELements(By.cssSelector("ul.displayAddressUL li.AddressAddressLine"));
List<WebElement> cities= driver.findELements(By.cssSelector("ul.displayAddressUL li.AddressCity"));
List<WebElement> countries=driver.findELements(By.cssSelector("ul.displayAddressUL li.country"));
List<WebElement> phoneNums=driver.findELements(By.cssSelector("ul.displayAddressUL li.phone"));

for (int i=0;i<fullNames.size(); i++){
String fullName= fullNames.get(i).getText();
String addressLine =addressLines.get(i).getText();
String city = cities.get(i).getText();
String county = countries.get(i).getText();
String phoneNumber = phoneNums.get(i).getText();
}

我还想补充一点:CSS 选择器的性能远优于 Xpath,并且在 Selenium 社区中有详细记录。原因如下:

  • Xpath 引擎在每个浏览器中都不同,因此要使它们不一致
  • IE 没有原生 xpath 引擎,因此 selenium 注入(inject)它自己的 xpath 引擎用于与其 API 兼容。因此我们失去了使用 WebDriver 固有的 native 浏览器功能的优势促进。
  • Xpath 往往会变得复杂,因此很难在我的文档中阅读。然而,在某些情况下,您需要使用xpath,例如,搜索父元素或搜索元素通过其文本(我不推荐后者)。

有关性能比较的更多详细信息,您可以获取here

2)我会推荐的另一种替代方法,如上所述 here尝试使用HtmlUnitDriver,这肯定会提高你的性能;或者:使用Javascipt执行器包装的纯js进行文本提取,例如:

 String elem_css_selector="blablabla...";
JavascriptExecutor js = (JavascriptExecutor) driver;
StringBuilder stringBuilder = new StringBuilder();

stringBuilder.append("var x = $(\""+elem_css_selector+"\");");
stringBuilder.append("return x.text().toString();") ;


String resultingText= (String) js.executeScript(stringBuilder.toString());
Assert.assertTrue(resultingText.trim().equals("Expected Text") );

关于java - 在java中使用firefox webdriver从当前节点获取Xpath,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28763750/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com