在我的Selenium测试中,我有时需要使用定位器(例如,driver.findElement(locator)),有时我需要使用webElements(例如List)。我想知道是否有任何理由,在一个项目中使用这些是不正确的,我应该坚持一种类型,并在每个pageObject中仅声明定位器或仅声明webElements。
感谢您的帮助!
答案 0 :(得分:1)
如果我正确理解你的要求,我发现尽管在pageObject上将所有或大部分内容作为webElements进行测试通常是可能且最方便的,但有时需要动态使用定位器直接在测试中识别某些元素。当你说“有时候需要使用定位器”时,我猜这就是你所遇到的。
一般来说,我会说通常更容易阅读像
这样的内容myCheckBox.click();
而不是
driver.findElement(possiblyCrypticLocator);
显然,无论何时需要重复使用webElements都会很方便。
但是,如果您需要动态使用定位器,我没有看到避免“混合”定位器和webElements的固有原因。其他人可能不同意。
答案 1 :(得分:1)
如果我理解您的问题,您的问题是关于Locators
和finding element(s)
定位器用于搜索 Current Browsing Context
中的元素。根据当前的 W3C WebDriver Specs
,以下位置策略表列出了为此属性定义的关键字和状态:
我们可以自由使用以下任何定位器来查找/搜索/识别元素:
<强> CSS
强>
driver.findElement(By.cssSelector("my_cssSelector"));
<强> Link Text
强>
driver.findElement(By.linkText("my_linkText"));
<强> Partial Link Text
强>
driver.findElement(By.partialLinkText("my_partialLinkText"));
<强> Tag Name
强>
driver.findElement(By.tagName("My_iframe"));
<强> Xpath
强>
driver.findElement(By.xpath("my_xpath"));
WebElement
是代表 HTML element
的界面。通常,与页面交互的所有用户操作都将通过此接口执行。 findElement()
和 findElements()
是几种已实施方法中的两种。这些方法调用将进行检查以确保元素引用仍然符合 DOM Tree
的当前状态。这基本上决定了目标元素是否仍然附加到HTML DOM
。
<强> findElement()
强>
findElement(By by) //Find the first WebElement using the given method.
<强> findElements()
强>
findElements(By by) //Find all elements within the current context using the given mechanism.
两者之间的主要区别是, findElement()
会返回 WebElement
,其中 findElements()
返回 List<WebElement>
。但是我们可以根据需要和要求在项目的任何地方使用上述两种方法中的任何一种。