gpt4 book ai didi

java - 如何在运行时提取 Selenium Web 元素的识别策略?

转载 作者:行者123 更新时间:2023-11-30 07:46:58 25 4
gpt4 key购买 nike

我遇到的问题是我的页面对象类找到屏幕上的所有对象,然后将其发送到更通用的方法来执行实际的数据输入。在此数据输入过程中,某些对象变得过时,我收到“StaleElementException”。

我的计划是捕获该异常并尝试再次重新查找该元素。

除了执行“object.toString()”然后解析它之外,还有其他方法可以从运行时 WebElement 对象中提取选择策略吗?

最佳答案

我通过在类顶部定义定位器来使用页面对象,然后是验证我们位于正确页面(等等)的构造函数,然后是页面上可用的每个操作的方法。以下是 Google 搜索页面的简单示例。

GoogleSearchPage.java

public class GoogleSearchPage
{
private WebDriver driver;
private By waitForLocator = By.id("lst-ib"); // optional
private By searchBoxLocator = By.id("lst-ib");
private By searchButtonLocator = By.cssSelector("button[name='btnG']");
private By feelingLuckyButtonLocator = By.id("gbqfbb");

public GoogleSearchPage(WebDriver webDriver)
{
driver = webDriver;
// wait for page to finish loading
new WebDriverWait(driver, 10).until(ExpectedConditions.presenceOfElementLocated(waitForLocator));

// see if we're on the right page
if (!driver.getCurrentUrl().contains("https://www.google.com"))
{
throw new IllegalStateException("This is not the Google search page. Current URL: " + driver.getCurrentUrl());
}
}

public void doSearch(String searchString)
{
driver.findElement(searchBoxLocator).sendKeys(searchString);
driver.findElement(searchButtonLocator).click();
}
}

GoogleSearchTest.java

public class GoogleSearchTest
{
public static void main(String[] args)
{
WebDriver driver = new FirefoxDriver();
driver.get("http://www.google.com");
GoogleSearchPage googleSearchPage = new GoogleSearchPage(driver);
googleSearchPage.doSearch("selenium");
System.out.println(driver.getCurrentUrl().contains("#q=selenium"));
}
}

这显然是一个 super 简单的示例,但它展示了一种创建页面对象的好方法,该方法应该显着降低 StaleElementExceptions 的频率,并且在某些情况下,可以加快脚本执行速度,因为您只需抓取所需的内容即可继续。

减少为页面上的每个元素提供 getX()clickX() 方法的冲动。相反,倾向于基于任务的方法。问问自己用户想要在页面上完成哪些任务,并提供完成这些任务的方法。它将让您的页面对象 API 更加清晰、更加清晰地向消费者(您和其他脚本编写者)提供什么。

关于java - 如何在运行时提取 Selenium Web 元素的识别策略?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33790730/

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