gpt4 book ai didi

selenium - WebDriver/将元素读入变量并重新使用它们

转载 作者:行者123 更新时间:2023-12-04 00:39:25 24 4
gpt4 key购买 nike

我对 Webdriver (Selenium 2) 有一个大问题。

在我的测试代码中,我在测试开始时找到所有元素,并对它们执行一些操作(如单击()、检查属性等)。我的问题是我的页面被刷新并重新加载我的元素,而 Webdriver 不知道再次识别这些元素。

我知道我可以再次找到我的元素,但在某些函数中我不知道我的 XPath/id,我只得到 WebElements,而不是 XPath/ID。

我说不可能将元素读入变量并重新使用它们是否正确?

最佳答案

WebElement element = driver.findElement(By.id("xyz"));

上面一行将元素对象存储在元素中。您当然可以将此元素传递给其他函数以在那里使用它。

我们通常遵循一种称为 PageObject 模式的模式,在这种模式中,我们将页面的所有对象创建为类的成员并立即实例化它们。这样我们就可以在项目的任何地方使用它们。例如,登录页面中的所有对象都将在名为 LoginPage 的类中创建为公共(public)静态变量。 LoginPage 类的构造函数将查找元素并存储它们。

下次您想要访问 LoginPage 对象的任何地方时,我们将按以下方式访问它们(假设您已经创建了元素 userName 并提交)...

LoginPage.userName.sendKeys("buddha");
LoginPage.submit.click();

然而,正如 Robie 所提到的,在页面刷新后,使用先前创建的对象有可能无法访问此对象。您可以使用以下修改后的方法来确保始终找到这些对象。

不是将对象创建为成员变量,而是为您可能需要使用的每个对象创建一个 get 方法。

class LoginPage
{
public static WebElement getUserName()
{
return driver.findElement(By.id("xyz"));
}
}

一旦以这种方式定义了 LoginPage,下次您想要使用 userName 时,您可以使用以下语法。这样您就不必为需要使用这些对象的函数提供定位符。

LoginPage.getUserName().sendKeys("buddha");

通过使用这种方法,您可以确保对象始终可访问。

关于selenium - WebDriver/将元素读入变量并重新使用它们,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20866836/

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