当前位置: 首页 > 知识库问答 >
问题:

有什么理由不在一个Selenium测试项目中同时使用WebElements和Locator吗

任昊苍
2023-03-14

在Selenium测试中,有时我需要使用定位器(例如driver.findElement(定位器)),有时我需要使用webElements(例如List)。我想知道是否有任何原因,在一个项目中使用这些方法是不正确的,我应该坚持使用一种类型,在每个pageObject中只声明定位器或webElements。

谢谢你的帮助!

共有2个答案

程卓君
2023-03-14

如果我正确理解了您的问题,您的问题是关于定位器查找元素

定位器用于搜索当前浏览上下文中的元素。根据当前的W3C WebDriver规范,下表列出了为该属性定义的关键字和状态:

我们可以自由使用以下任何定位器来查找/搜索/识别元素:

>

  • CSS

    driver.findElement(By.cssSelector("my_cssSelector"));
    

    链接文本

    driver.findElement(By.linkText("my_linkText"));
    

    部分链接文本

    driver.findElement(By.partialLinkText("my_partialLinkText"));
    

    标签名称

    driver.findElement(By.tagName("My_iframe"));
    

    Xpath

    driver.findElement(By.xpath("my_xpath"));
    

    WebElement是一个表示HTML元素的接口。通常,与页面交互的所有用户操作都将通过此界面执行findElement()findElements()是几种实现方法中的两种。这些方法调用将进行检查,以确保元素引用在DOM树的当前状态下仍然有效。这从本质上决定了目标元素是否仍然附加到HTMLDOM

    >

  • 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

  • 孔经武
    2023-03-14

    如果我正确地理解了您的要求,我发现,虽然将测试所需的全部或大部分内容声明为pageObject上的webElements通常是可能的,也是最方便的,但有时有必要在测试中直接动态地使用定位器来识别某些元素。当你说“有时需要使用定位器”时,我猜这就是你遇到的情况。

    总的来说,我认为阅读以下内容通常更容易

    myCheckBox.click();
    

    而不是

    driver.findElement(possiblyCrypticLocator);
    

    显然,无论何时需要重用webElements,都可以方便地定义webElements。

    但是,如果需要动态使用定位器,我看不到避免“混合”定位器和Web元素的内在原因。其他人可能不同意。

     类似资料:
    • 我正在用chromedriver运行selenium,并且它都运行得很好。最近我试着同时使用10个chromedrivers,这会占用所有可用的内存,所以我试着用ChromeOptions中的headless选项来解决这个问题。 尝试了以下选项: 试图在类似的帖子中找到一些信息,但找不到一个有效的解决方案。谢谢你。

    • 以下是输出信息: 线程“main”java.lang.noClassDeffounder:top/example/study/testclass(名称错误:top/example/study/testclass)在java.base/java.lang.classloader.defineclass1(本机方法)在java.base/java.lang.classloader.defineclas

    • 问题内容: Eclipse是一个非常好的编辑器,我更喜欢使用它,但是缺少用于Eclipse的GUI设计工具。另一方面,NetBeans在GUI设计中确实很好用。 使用NetBeans进行GUI设计并将Eclipse用于同一项目上的其他所有内容,是否有任何提示,技巧或陷阱? 编辑: 我尝试了Maven,它似乎不起作用(太复杂,对于我的需求)。 问题答案: 使用Netbeans创建GUI。将Eclip

    • 问题内容: 我有一个ASP.NET MVC 5 Web项目,并且我有一个基于MsTest的单元测试项目,该项目使用Selenium进行一些自动化的“浏览器”测试。 当前,我必须运行Web项目(在本地IIS Express中),然后针对该项目运行测试,但这有各种限制。例如,我只能“运行”测试,而不能“调试”它们。显然,这与我的持续集成流程并不合适。 没有办法让测试启动网站实例吗?(我知道ASP.NE

    • 问题内容: 我指的是模块中的OrderedDict,这是一个有序的字典。 如果它具有可订购的附加功能,我意识到这通常不是必需的,但是即使如此,是否还有缺点?慢一点吗?是否缺少任何功能?我没有看到任何丢失的方法。 简而言之,为什么我 不 总是使用它而不是普通的词典? 问题答案: 是的子类,并且需要更多内存来跟踪键的添加顺序。这不是小事。该实现在幕后增加了第二个,所有键的双向链接列表(这是记住顺序的部