我正在使用C#进行selenium应用程序开发。我在网页上有一个下拉菜单。单击下拉菜单后,我希望selenium单击确切的名称。我现在成功点击了下拉菜单,我可以查看该菜单上的标题或选项。
我想要的是我需要selenium根据用户在首次打开应用程序时提供的内容点击标题。实际上菜单按钮不可见,但当我将鼠标悬停在名称上时,它是可见的。
我试过了
var menu = driver.FindElement(By.ClassName("ms-vb"));
SelectElement sel = new SelectElement(menu);
sel.SelectByText(text);
其中text是用户输入的文本。在运行应用程序时,会抛出类似
的错误“元素应该被选中但是是img”
我该如何解决这个问题?由于这个原因,我的任务暂停了。
任何意见都将非常感谢..
由于
HTML
我希望这是您需要的代码:
<table cellspacing="1" cellpadding="0" height="100%" onmouseover="OnMouseOverFilter(this)" class="ms-unselectedtitle"
sortfields="SortField=Unify%5fx0020%5fApp&SortDir=Asc&View=%7b696D6B29%2d5A5D%2d47F3%2d97CF%2dECBFDD1E2CE8%7d"
resulttype="" fieldtype="Lookup" displayname="Unify App" ctxnum="1" name="Unify_x0020_App" filterable="" filterdisable=""
sortdisable="" sortable="" style="width:100%;" id="msomenuid2">
<tbody>
<tr>
<td width="100%" nowrap="nowrap" class="ms-vb">
<a sortingfields="SortField=Unify%5fx0020%5fApp&SortDir=Asc&View=%7b696D6B29%2d5A5D%2d47F3%2d97CF%2dECBFDD1E2CE8%7d"
onclick="javascript:return OnClickFilter(this,event);" href="javascript:" title="Sort by Unify App"
onfocus="OnFocusFilter(this)" id="diidSortUnify_x0020_App">Unify App
<img width="1" border="0" height="1" alt="Use SHIFT+ENTER to open the menu (new window)." class="ms-hidden"
src="/_layouts/images/blank.gif" /></a>
<img border="0" alt="" src="/_layouts/images/blank.gif" />
<img border="0" alt="" src="/_layouts/images/blank.gif" />
</td>
<td style="position: absolute; right: 1px;" class="">
<img width="13px" alt="Open Menu" style="visibility: hidden;" src="/_layouts/images/menudark.gif" />
</td>
</tr>
</tbody>
</table>
答案 0 :(得分:0)
如果它不是普通元素,则SelectElement类将不起作用。
这是我处理javascript下拉菜单的方式:
//Click on the dropdown
driver.FindElement(By.ClassName("ms-vb")).Click();
//Wait for the result list to appear
wait.Until(x => x.FindElement(By.LinkText("Target link to click")));
//Click on the result you want
driver.FindElement(By.LinkText("Target link to click")).Click();
如果结果不是链接,则应使用xPath按文本定位。实施例
driver.FindElement(By.XPath("//*[text()='Target text']")).Click();
希望它有所帮助。