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

如何找到知道子元素的父元素

葛炜
2023-03-14

我通过以下方式通过文本找到了一个孩子。

Driver.FindElement(By.XPath("//span[contains(@class,'MyClass')][contains(text(),'MyText')]"));

问题是我需要单击父元素。页面上的元素是动态显示的,之前我只知道文本。是否可以对此进行编程?

我的html:

<div class="list-item list-item-station ui-draggable ui-draggable-handle">
    <div class="operations">
        <span class="fa fa-times"></span>
    </div>
    <div class="icon-image image-item">
        <span class="fa fa-user"></span>
    </div>
    <div class="icon-name editable-input-long">
        <span class="will-edit will-edit-input will-edit-textarea">MyText</span><textarea class="editable-  textarea"></textarea>
    </div>
</div>

共有3个答案

越嘉茂
2023-03-14

您可以使用下面的xpath获取父列表项div:

Driver.FindElement(By.XPath("//span[contains(@class,'will-edit')][contains(text(),'MyText')]/ancestor::div[contains(@class,'list-item')][1]"));

要使用MyText获取包含子span的列表项div,请执行以下操作:

Driver.FindElement(By.XPath("//div[contains(@class,'list-item') and .//span[contains(@class,'will-edit')][contains(text(),'MyText')]]"));

使用span和MyText获取textarea:

Driver.FindElement(By.XPath("//div[contains(@class,'list-item') and .//span[contains(@class,'will-edit')][contains(text(),'MyText')]]//textarea"));
苏淇
2023-03-14

使用XPath,您可以进行DOM导航,因此您可以首先抓取子节点的IWebElement,然后使用...的XPath向上导航一个级别。

IWebElement child = Driver.FindElement(By.XPath("//span[contains(@class,'MyClass')][contains(text(),'MyText')]"));
child.FindElement(By.XPath("..")).Click();

如果可以修改子XPath,则只需在一次查找中找到父XPath。

Driver.FindElement(By.XPath("//span[contains(@class,'MyClass')][contains(text(),'MyText')]/..")).Click();
                                                                                          ^ added the parent axis here

有其他方法可以实现这一点,但这两种方法应该让您开始。

参考:MDN Web文档-父级

皇甫文乐
2023-03-14

我正在使用XPath:

    using (IWebDriver driver = new ChromeDriver(this.SeleniumDriverPath, driveroptions))
                {
                    try
                    {
                        driver.Navigate().GoToUrl("http://www.google.com/");

                        IWebElement query = driver.FindElement(By.Name("q"));
            query.SendKeys("link");
                    query.Submit();

                        var wait = new WebDriverWait(driver, TimeSpan.FromSeconds(10));
                        var listElement = driver.FindElements(OpenQA.Selenium.By.XPath(".//*[@id='search']//div[@class='g']"));
                        foreach( var e in listElement)
                        {
                                    // parent element:
                            var parent = e.FindElement(OpenQA.Selenium.By.XPath("./.."));   //parent element
    parent.Click();
                        }
                    }
                    catch(Exception ex)
                    {
                        ...
                    }

                    driver.Quit();
                }
 类似资料:
  • 急求!子元素设置了float:left,为什么是浮动到父元素的父元素(part1)上,而不是浮动到父元素(box1)上?想让这个子元素和学院新闻同行应该怎么办? 这是那个子元素 这是那个子元素 这是整体:

  • 我正在尝试将我的selenium测试转换为使用页面对象模型(以及扩展为@FindBy)。我有几个这样的对象定义: 将父对象转换为使用FindBy很容易: 基本上,如果可能的话,我想这样做(我知道这不是真正的代码,这只是一个伪示例: 但是,有没有一种方法可以使用FindBy在父元素中定位子元素呢 。我需要这样做,因为我的目标是页面上的特定元素,这些元素可能与页面上的其他元素共享相同的名称或类名。谢谢

  • 我不能得到子元素。 我可以用appium inspector看到childNameTV元素下的childNameLabel元素 例如,我尝试查找第一个子元素的文本;

  • 问题内容: 假设我有以下代码: 现在,我需要在上面,但是在jsFiddle中,您可以看到child元素呈现在before之前。 如果您删除 类 或 ,则一切正常。这是我需要的正确行为: http //jsfiddle.net/ZjXMR/1/ 如何在不删除页面的情况下执行此操作? 问题答案: 这是不可能的,因为子级的设置与父级的堆叠索引相同。 您已经通过从父级移除z-index来解决该问题,将其保

  • 最有效的方法是只使用纯javascript查找特定父元素的子元素(带有类或ID)。没有jQuery或其他框架。 在这种情况下,我需要找到parent的child1或child2,假设DOM树中可以有多个child1或child2类元素。我只想要父母的元素

  • 在此代码中,节的高度为0。但img的高度为600px。我如何将img的高度赋予它的父元素,也就是section? 正如您在图片部分中看到的,class=“banner container”没有高度。