我对(Selenium 2)有一个大问题Webdriver。
在我的测试代码中,我找到测试开始时的所有元素,并对它们执行一些操作(例如click()、检查属性等)。我的问题是我的页面刷新并重新加载我的元素,而 Webdriver 不知道再次识别这些元素。
我知道我可以再次找到我的元素,但在某些函数中我不知道我的 XPath/ids,并且我只得到 WebElements,而不是 XPath/ID。
我说的对吗?不可能将元素读入变量并重新使用它们?
WebElement element = driver.findElement(By.id("xyz"));
Run Code Online (Sandbox Code Playgroud)
上面的行将把元素对象存储在element变量中。您当然可以将此元素传递给其他函数以在那里使用它。
我们通常遵循页面对象设计模式,将页面的所有对象创建为类的成员并立即实例化它们。这样我们就可以在项目中的任何地方使用它们。例如,登录页面中的所有对象都将在名为 的类中创建为公共静态变量LoginPage。类的构造函数LoginPage将查找元素并存储它们。
下次您想要访问 的对象时LoginPage,我们将按如下方式访问它们(假设您已经创建了元素userName和submit)...
LoginPage.userName.sendKeys("buddha");
LoginPage.submit.click();
Run Code Online (Sandbox Code Playgroud)
然而,正如 Robbie 提到的,页面刷新后,使用先前创建的对象有可能无法访问这些对象。您可以使用以下修改后的方法来确保始终找到这些对象。
不要将对象创建为成员变量,而是为您可能需要使用的每个对象创建一个get 方法。
class LoginPage
{
public static WebElement getUserName()
{
return driver.findElement(By.id("xyz"));
}
}
Run Code Online (Sandbox Code Playgroud)
一旦LoginPage以这种方式定义,下次您想使用 时userName,您可以使用以下语法。这样您就不必为需要使用这些对象的函数提供定位器。
LoginPage.getUserName().sendKeys("buddha");
Run Code Online (Sandbox Code Playgroud)
通过使用这种方法,您可以确保对象始终可访问。
| 归档时间: |
|
| 查看次数: |
6309 次 |
| 最近记录: |