C# 如何找到知道子元素的父元素
我通过以下方式通过文本找到了一个孩子C# 如何找到知道子元素的父元素,c#,selenium,C#,Selenium,我通过以下方式通过文本找到了一个孩子 Driver.FindElement(By.XPath("//span[contains(@class,'MyClass')][contains(text(),'MyText')]")); 问题是我需要单击父元素。页面上的元素是动态显示的,在前面我只知道文本。有可能对其进行编程吗 我的html: 我的文本 我正在使用XPath: using (IWebDriver driver = new ChromeDriver(this.SeleniumD
Driver.FindElement(By.XPath("//span[contains(@class,'MyClass')][contains(text(),'MyText')]"));
问题是我需要单击父元素。页面上的元素是动态显示的,在前面我只知道文本。有可能对其进行编程吗
我的html:
我的文本
我正在使用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();
}
使用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
还有其他方法可以实现这一点,但这两种方法应该让您开始
参考资料:您可以使用下面的xpath获取父
列表项
div:
Driver.FindElement(By.XPath("//span[contains(@class,'will-edit')][contains(text(),'MyText')]/ancestor::div[contains(@class,'list-item')][1]"));
要获取带有子span的列表项div,请使用MyText:
Driver.FindElement(By.XPath("//div[contains(@class,'list-item') and .//span[contains(@class,'will-edit')][contains(text(),'MyText')]]"));
Driver.FindElement(By.XPath("//div[contains(@class,'list-item') and .//span[contains(@class,'will-edit')][contains(text(),'MyText')]]//textarea"));
使用span withMyText获取文本区域:
Driver.FindElement(By.XPath("//div[contains(@class,'list-item') and .//span[contains(@class,'will-edit')][contains(text(),'MyText')]]"));
Driver.FindElement(By.XPath("//div[contains(@class,'list-item') and .//span[contains(@class,'will-edit')][contains(text(),'MyText')]]//textarea"));
我想到了杰夫克的答案。非常感谢你。我重新输入了代码以适应我的情况
IWebElement child=Browser.FindElement(By.XPath(//span[contains(@class,'will-edit-will-edit-edit-input-will-edit-textarea'))][contains(text(),“+name+”)]”);
FindElement(By.XPath(“....”).Click()代码>您好,这可能有帮助:与父元素pleaseA共享HTML在浏览器界面中创建用户。然后他出现在其他人当中。选择它是必要的。我知道创建它的登录名。因此,xpath总是不同的。我可以直接按上面的名字联系。但您需要单击父元素以打开另一个具有其权限的页面。可能存在重复的