我通过以下方式通过文本找到了一个孩子。
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>
您可以使用下面的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"));
使用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文档-父级
我正在使用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”没有高度。