【问题标题】:cannot click proper element within another element无法单击另一个元素中的正确元素
【发布时间】:2020-08-06 17:01:53
【问题描述】:

我正在尝试按其名称获取某行,然后单击该元素中的一个元素。 我要做的是:

// searching for a row with the given name of the column content
WebElement row = driver.findElement(By.xpath("//div[contains(text(), 'John Smith']//ancestor::div[@class='row']"));

//clicking button within the row
Webelement button = row.findElement(By.xpath("//button[@class='Click']"))

它不是这样工作的,它总是单击表格第一行中的按钮。附言WebElement row 本身被正确识别并找到正确的行。仅当我想在所需行中搜索按钮时。对此有何建议?

【问题讨论】:

    标签: java selenium xpath


    【解决方案1】:

    要访问父元素的直接子元素,您需要提供.

    Webelement button = row.findElement(By.xpath(".//button[@class='Click']"))
    

    或者你可以使用这个

    Webelement button = driver.findElement(By.xpath("//div[//div[contains(text(), 'John Smith']]/button[@class='Click']"))
    

    两者都应该工作。

    【讨论】:

    • 谢谢,我的意思是专门在另一个元素中搜索一个元素,所以你的第一个解决方案(我知道的第二个)。谢谢,它有效。我想知道为什么圆点会产生如此大的差异?
    • @jacob1989 '.' at the beginning 表示当前处理从当前节点开始
    【解决方案2】:

    您正在尝试使用 elem 而不是 row 来查找按钮。 也许使用 row.findElement(By.xpath("//button[@class='Click']")) 可以解决您的问题。

    【讨论】:

    • 对不起,错误的复制粘贴,我之前将其命名为“elem”,但认为这里没有意义,所以改为行以提供更好的图片。所以不幸的是,这不是它
    • 我就是这么想的。假设您使用的是 Java 8+,您可以使用 Stream 对象,例如:WebElement button = driver.findElements(By.className).stream().filter(e -> e.getText().contains("John Smith))。 findFirst().get().findElement(By.xpath("//button[@class='Click']"))
    • 是的,这可以解决问题,但是我已经看到其他人在网上以及我公司回购的其他地方建议的上述方式,并且效果很好。我想知道我可以检查什么来找出这个失败的原因?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-01-04
    • 1970-01-01
    • 2015-10-03
    • 2017-10-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多