【问题标题】:Selenium with JS how to count child elements inside parentSelenium 与 JS 如何计算父元素中的子元素
【发布时间】:2021-03-23 05:49:36
【问题描述】:

我得到了以下 HTML 结构:

<ul id="test">
   <li><div><span>name one</span></div></li>
   <li><div><span>name two</span></div></li>
   <li><div><span>name three</span></div></li>
   <li><div><span>name four</span></div></li>
</ul>

我的第一个问题是如何使用 Selenium 获取 li 标签的数量。 在柏树中很简单:

cy.get('#test').children().should('have.length', 4)

我的第二个问题是: 我怎么能在这个 ul 中得到第 n 个孩子? 我尝试这样做:

const firstName = await d.driver.findElements(By.xpath("//ul[contains(@id, 'test')]/li/div/span")).getText()

这里我得到了第一个 li 文本,但是我怎么能得到里面剩下的列表的文本呢?

const secondManualName = await d.driver.findElement(By.cssSelector("ul[contains(@id, 'test')]>li:nth-child(2)>div>span")).getText()

在上面的代码行中,它抛出了一个错误,即没有这样的函数。我不明白为什么硒文档如此不完整。如果您向我推荐一些带有 JS 的 selenium 好网站,我将不胜感激(带有一些很好的例子)。

【问题讨论】:

    标签: javascript selenium selenium-webdriver xpath css-selectors


    【解决方案1】:

    要在&lt;ul&gt; 中获取nth &lt;li&gt; child,您可以使用以下任一Locator Strategies

    • cssSelector:

      ul#test li:nth-child(n) > div > span
      where, n = 2,3,4 etc.
      
    • 有效的代码行:

      await driver.findElement(By.css("ul#test li:nth-child(2) > div > span")).getText()
      
    • xpath:

      //ul[@id='test']//following::li[n]/div/span
      where, n = 2,3,4 etc.
      
    • 有效的代码行:

      await driver.findElements(By.xpath("//ul[@id='test']//following::li[2]/div/span")).getText()
      

    【讨论】:

    • 在这两个代码上我得到了一个错误:TypeError: d.driver.findElements(...).getText is not a function
    • @DragoJokera 我不确定 getText 我从你的代码试验中得到它。我现在已将其删除。请重新测试并告诉我状态。
    • TypeError: By.cssSelector 不是一个函数,对于 xpath 来说它不是一个合法的表达式
    • @DragoJokera 查看更新的答案并告诉我状态。
    • 我找到了正确的方法:const secondName = await d.driver.findElement(By.xpath(//*[@id="test"]/li[2]/div/span)).getText()
    猜你喜欢
    • 2017-08-23
    • 2021-06-07
    • 2019-07-21
    • 2011-03-09
    • 2018-08-16
    • 2014-11-05
    • 1970-01-01
    • 1970-01-01
    • 2023-03-28
    相关资源
    最近更新 更多