我通过以下方式通过文字找到了一个孩子。
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>
答案 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。
..
还有其他方法可以完成此操作,但这两种方法应该可以帮助您入门。