如何使用Selenium Webdriver识别此元素

时间:2014-11-14 18:55:21

标签: c# selenium xpath selenium-webdriver webdriver

我试过通过Id,XPath和CssSelector找到元素,但没有运气。在寻找元素时,测试会超时。

<div xmlns="http://www.w3.org/1999/xhtml" id="HyperlinkBetaSentry" 
style="top:0px;left:521px;height:24px;width:70px;cursor:pointer;text-align:center" 
class="DashboardHyperlink"><a target="_blank" 
href="https://salsa.sentry.com/SalsaDataSentry/wafForm.aspx?__sso=1234567890" style="color:#e6e7e8;vertical-align:middle;text-decoration:none">Beta Sentry</a></div>

我试过了:

var title = Driver.Instance.FindElement(By.CssSelector("#HyperlinkBetaSentry"));
var title = Driver.Instance.FindElement(By.Xpath("//*[@id='HyperlinkBetaSentry']"));
var title = Driver.Instance.FindElement(By.Id("HyperlinkBetaSentry"));

2 个答案:

答案 0 :(得分:0)

我会认为By.Id应该工作。通常当发生这种情况时,因为寻找元素的代码在元素存在之前执行(例如,DOM没有完全加载,或者某些Javascript改变了DOM,或者Ajax请求等)< / p>

作为确认的测试。在查找元素之前,在代码中设置断点。确保元素确实按预期存在,然后单步执行尝试查找它的代码。它有机会找到它。

有时会导致这种情况的另一个原因是,您正在寻找与您的元素不同的框架。

答案 1 :(得分:0)

有多个问题可能导致此问题。

  1. 将点击转到标记

    var title = Driver.Instance.FindElement(By.CssSelector(“#HyperlinkBetaSentry&gt; a”));

  2. 元素加载时间

  3. 重复ID
  4. 在案例2中:您可以定义一些明确的等待元素可见。

    WebElement myDynamicElement = (new WebDriverWait(driver, 10))
      .until(ExpectedConditions.presenceOfElementLocated(By.id("YourID")));
    

    请参阅here了解相关信息。

    案例3:您可能希望使用xpath或css with multiple attributes进行文本库搜索。

    .//*[.='Beta Sentry']