我怎样才能获得这个链接元素?始终显示"无法找到带链接文字的元素==搜索"

时间:2016-09-01 09:49:50

标签: javascript c#

我正在学习使用c#的selenium,我想点击列表下的链接,但总是显示错误"无法找到带链接文字的元素==搜索",代码如下:

<div id="ctl00_subNavMain_upSubMenu">
    <ul id="ctl00_subNavMain_subMenu">
        <li class="btnHome selected">
            <a href="javascript:__doPostBack('ctl00$subNavMain$subMenu','0')">Home</a>
        </li>
        <li class="btnNew">
            <a href="javascript:__doPostBack('ctl00$subNavMain$subMenu','1')">New Observation</a>
        </li>
        <li class="btnTestPlatform">
            <a href="javascript:__doPostBack('ctl00$subNavMain$subMenu','2')">Test Platforms</a>
        </li>
        <li class="btnSearch">
            <a href="javascript:__doPostBack('ctl00$subNavMain$subMenu','3')">Search</a>
        </li>
        <li class="btnOTS">
            <a href="javascript:__doPostBack('ctl00$subNavMain$subMenu','4')">Remedy OTS</a>
        </li>
        <li class="btnBug">
            <a href="javascript:__doPostBack('ctl00$subNavMain$subMenu','5')">Bugzilla</a>
        </li>
    </ul>
</div>

我试过这个:

            ReadOnlyCollection<IWebElement> links = driver.FindElements(By.XPath("//*[contains(text(),'Search')]"));
            MessageBox.Show(links.Count.ToString());
            foreach (IWebElement link in links)
            {
                if(link.TagName=="a")
             {
                    //MessageBox.Show(link.Displayed.ToString());
                    link.Click();                  
            }                            
           }

但它显示错误&#34;此元素无法点击&#34;我已经尝试使用&#34; link.Displayed&#34;,这些都是假的,所以我怎么能解决它,对我来说这是个大问题,谢谢!

我试过这个:&#34; MessageBox.Show(link.Enabled.ToString());&#34;全部返回&#34; true&#34;

解决方案:&#34; javascriptexecuter js =(javascriptexecuter)驱动程序; js.executescript(&#34; arguments [0]。click()&#34;,link);&#34; 非常感谢。

2 个答案:

答案 0 :(得分:1)

您可以在find元素中将其用作xpath:

// * [含有(文本(), '搜索')]

答案 1 :(得分:1)

我同意Hezi Israel。 除非您正在寻找几个元素共有的字符串,否则更喜欢使用'contains'而不是'='。我已经测试了在特定单词之前的\之前有空格的网页,这导致我使用'='的xpath失败。使用'contains'保护你。