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

时间:2019-10-14 15:09:47

标签: c# selenium

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

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>

4 个答案:

答案 0 :(得分:1)

我正在使用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();
                }

答案 1 :(得分:0)

您可以使用以下xpath来获取父级@font-face { font-family: 'Museo-Sans'; src: url('../fonts/MuseoSans/MuseoSans-900.eot'); /* IE9 Compat Modes */ src: url('../fonts/MuseoSans/MuseoSans-900.eot?#iefix') format('embedded-opentype'), /* IE6-IE8 */ url('../fonts/MuseoSans/MuseoSans-900.woff') format('woff'), /* IE 9-11 & Modern Browsers */ url('../fonts/MuseoSans/MuseoSans-900.ttf') format('truetype'), /* Safari, Android, iOS */ url('../fonts/MuseoSans/MuseoSans-900.svg#svgFontName') format('svg'); /* Legacy iOS */ } div:

list-item

要获取带有{strong> MyText 的子跨度的Driver.FindElement(By.XPath("//span[contains(@class,'will-edit')][contains(text(),'MyText')]/ancestor::div[contains(@class,'list-item')][1]")); div:

list-item

使用跨度为 MyText 的文本区域:

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

答案 2 :(得分:0)

JeffC的答案浮出水面。非常感谢你。我重新编写了一些代码以适合我的情况。

IWebElement child = Browser.FindElement(By.XPath("//span[contains(@class,'will-edit will-edit-input will-edit-textarea')][contains(text(),'"+name+"')]"));
child.FindElement(By.XPath("../..")).Click();  

我认为可能还会有其他答案。我没有尝试。非常感谢大家!

答案 3 :(得分:-1)

使用XPath,您可以进行DOM导航,因此,您可以先抓住作为子级的E < V / logV,然后使用K的XPath向上导航一个级别。

IWebElement

如果您能够修改子XPath,则只需一次查找即可找到父XPath。

..

还有其他方法可以完成此操作,但这两种方法应该可以帮助您入门。

参考:
MDN Web docs - parent