我想用Selenium找到以下项目。每当发生更改时,类的值都会更改。这是在一个复杂的页面(多个 iframe 和其他动态加载的项目(中。唯一唯一的id是itemid
,它是动态值和title
组合。如果我单击此操作,则会得到另一组新的复杂项目。我是硒的新手。怎么做?
.HTML:
<td itemid="xxyyy.as123" title="Actions" nowrap="" class="text-button">Actions <img src="../row.gif"></td>
<td itemid="xxyyy.as123" title="Actions" nowrap="" class="text-button button-active">Actions <img src="../row.gif"></td>
<td itemid="xxyyy.as123" title="Actions" nowrap="" class="text-button button-hover">Actions <img src="../row.gif"></td>
我尝试的代码:
通过 Xpath 查找
var element=driver.FindElement(By.XPath("html/body/div[id='pageContent']/iframe/#document/html/frameset/frame[name='detailsDisplay']/#document/html/body/form[name='tableForm']/div[id='divToolbarContainer']/div[id='divToolbar']/div[1][class='toolbar']/table/tbody/tr/td[title='Actions']"));
按链接文本查找
var element = driver.FindElement(By.LinkText("Actions"));
任何帮助将不胜感激。
尝试
By.CssSelector("td[title="Actions"]");
By.CssSelector("td[itemid="xxyyy.as123"]");
By.CssSelector("td[itemid="xxyyy.as123"][title="Actions"]")
创建动态 CSS 选择器。
例如:
driver.FindElement(By.CssSelector("td[itemid$="xxyyy."]")).Click();
注意:在动态元素中,始终有一部分定位器是固定的。 我们需要使用此部分生成定位器。
- 如果固定部分在启动时 - 使用胡萝卜字符 (^(
- 如果固定部件位于中间 - 使用星号 (*(
- 如果固定部件位于末尾 - 使用娃娃符号 ($(
最后,我能够通过使用帧名称来实现它。
driver.SwitchTo().Frame("content").SwitchTo().Frame("detailsDisplay");
var element = driver.FindElement(By.XPath("//*[@id="divToolbar"]/div[1]/table/tbody/tr/td[1]"));
谢谢大家。