【问题标题】:need help to find Xpath of following html--selenium--需要帮助来查找以下 html--selenium-- 的 Xpath
【发布时间】:2016-07-20 10:51:28
【问题描述】:

我正在使用 firebug 来查找 xpath,这是错误控制台中显示的错误。

没有这样的元素:无法定位 元素:{"method":"xpath","selector":".//*[@id='select2-contact_id-result-v0w5-258']"}

driver.findElement(By.xpath(".//*[@id='select2-contact_id-result-v0w5-258']")).click();

html如下

id="select2-contact_id-result-v0w5-258" class="select2-results__option select2-results__option--highlighted" role="treeitem" aria-selected="false">Single contact

【问题讨论】:

  • 您需要为我们提供比一个元素的属性更多的 html。到目前为止你给我们的信息,我唯一的猜测是存在时间问题(对象尚未出现)或者它在 iframe 内。
  • 实际上有两个依赖的可搜索下拉菜单。一个取决于其他..如果我们从第一个下拉列表中搜索并选择公司。那么在第二个下拉列表中,我们有所选公司的联系方式。在第二个下拉列表中,我们必须搜索并选择一个联系人。我已经搜索了该联系人,但它的 Xpath 不可点击,因为错误说..
  • 因此,如果您向我们展示更多代码,也许我们可以帮助您确定问题所在。同样,一个疯狂的猜测是执行第一步的代码没有正确完成它的工作,导致第二步被破坏。

标签: java html selenium xpath


【解决方案1】:

可能有以下原因:-

  • 可能是您的id 是动态生成的,因此您需要尝试使用不同的定位器来创建By 对象,如下所示

    By by = By.className("select2-results__option select2-results__option--highlighted");
    

    By by = By.cssSelector(".select2-results__option select2-results__option--highlighted");
    

    By by = By.xpath("//*[contains(., 'Single contact')]");
    

    或者如果id不是动态生成的

    By by = By.id("select2-contact_id-result-v0w5-258");
    
  • 可能是您的元素在frameiframe 内,如果是,那么您需要在找到以下元素之前切换frameiframe:-

    driver.switchTo().frame("frame id or name or index");
    
  • 可能由于网速慢,页面上的元素没有完全加载,所以你需要实现WebDriverWait 等待元素可见和可点击,如下所示:-

    WebDriverWait wait = new WebDriverWait (driver, 10);
    WebElement el = wait.until(ExpectedConditions.elementToBeClickable(by)); //use anyone of the above by object
    

现在成功获取元素后,您需要执行click,如下所示:-

el.click();

注意:- 如果您的元素实际上是带有select 标签的下拉菜单,那么您需要创建Select() 对象以使用下拉菜单,如下所示:-

Select sel = new Select(el);

//now perform step to select an option by visible text from dropdown 
sel.selectByVisibleText("your visible option text");

sel.selectByIndex("your option index");

sel.selectByValue("your option value");

希望对你有帮助..:)

【讨论】:

  • 实际上,每当我们点击元素时,xpath 都会改变它的值。我为 thatdriver.findElement(By.xpath("//li[contains(@id, 'select2-contact_id-result-')]") ).click(); 使用了通配符
  • @niazi..是的,正如我所说,您的 id 看起来像是动态生成的...所以这个也是最好的xpath 定位...:)
  • @niazi 但我建议您优先考虑By.classNameBy.cssSelector...如果不成功,请尝试使用xpath...因为使用xpath 比其他定位器来定位元素..:)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多