【问题标题】:Selenium | Unable to click element under <Span>硒 |无法单击 <Span> 下的元素
【发布时间】:2015-10-27 15:25:39
【问题描述】:

我是 Selenium 的新手。我正在尝试单击具有以下代码的子菜单选项:

<div class="nav-level nav-level-open">
  <ul id="menu_0af0fc80e81924533d028c395adb60e8">
    <li class="nav-item">
      <a class="" href="?s=jobs&ss=jobs&mode=list">
        <i class="icn-next" aria-hidden="true"></i>
        <span> All Jobs - jobs/ internships/ campus interviews</span>
      </a>
    </li>

我正在尝试单击此处标记为“所有工作 - 工作/实习/校园面试”的按钮。作为一个菜单,有多个具有相同类名的此类链接。我更喜欢使用 Css 定位器或 Xpath 定位元素。有人可以帮帮我吗?

【问题讨论】:

  • 如果我做对了,那么为 span 标签提供 id 并尝试使用 id 属性选择相同的标签。

标签: selenium selenium-webdriver


【解决方案1】:

试试下面的 xpath,我假设网页中没有重复字符串“所有工作 - 工作/实习/校园面试”

driver.findElement(By.xpath("//span[contains(text(),' All Jobs - jobs/ internships/ campus interviews')]"));

您可以使用上述策略来查找目标示例。如果元素的显示字符串在网页中没有重复

【讨论】:

  • 谢谢!这行得通。这是一个简单易行的技巧。 :D 但我必须在“所有工作”和单个引号之前删除额外的空间。我记下了这一点。再一次感谢你。 :)
【解决方案2】:

首先在 firefox 中安装 FirePath 插件,然后使用 firepath 检查按钮。试试下面的代码 -

driver.findElement(By.xpath("//copy paste the xpath here")).click(); //driver is the reference of WebDriver interface.

【讨论】:

  • 非常感谢您的意见。这虽然失败了。我从中得到的 xpath 有字母数字文本。 Mohan Raj S 在前面的帖子中指出,我们应该避免这种情况。会不会是这个原因?
  • 是的,按钮的 id 是动态生成的。所以每次页面加载时它总是有一个唯一的字母数字ID。因此,如果您使用 id 值声明 xpath,您的 selenium webdriver 将无法找到该元素。另一种方法是使用像@Mohan Raj S 所说的跨度文本声明xpath。
【解决方案3】:
driver.FindElement(By.XPath("//ul[@id='menu_0af0fc80e81924533d028c395adb60e8']/li/a")).Click();

【讨论】:

  • @LBar : id 值为 menu_0af0fc80e81924533d028c395adb60e8。我们必须避免这样的 id 这是字母数字。动态值。当页面重新加载时它可能会改变。
  • driver.FindElement(By.XPath("//div[@class='nav-level nav-level-open']/ul/li/a")).Click();
  • @L.Bar - 太棒了!!!这行得通!太感谢了!你能解释一下这里的逻辑吗?我也想进一步了解。
  • 好的,首先你需要为你需要使用的对象获取一些(id/class/name),如果它没有这个,在你找到之后尝试在树上查看他的父亲您需要从他那里获得的身份证明您需要提供对象的完整路径,如示例中您可以在以下位置看到更多示例:toolsqa.com/selenium-webdriver/choosing-effective-xpath
【解决方案4】:

试试这个:

WebDriver driver = new FirefoxDriver();
WebeElement element ;

element = driver.findElement(By.xpath("//*[ul[@id='menu_0af0fc80e81924533d028c395adb60e8']/li/a"); 
driver.click;

【讨论】:

    【解决方案5】:

    试试这个:

    driver.findElement(By.xpath("//span[contains(text(),' All Jobs - jobs/ internships/ campus interviews')]"));
    

    【讨论】:

    • 谢谢,但这不起作用。这是一个子菜单项。一切正常,直到我单击主菜单项。一旦我通过它,我收到一个错误,上面写着:“引起:org.openqa.selenium.NoSuchElementException:无法找到元素:{“method”:“xpath”,“selector”:“//span [包含(文本(),'所有工作 - 工作/实习/校园面试')]“}”我也尝试添加明确的等待。即使这样也没有用。还有其他原因吗?
    猜你喜欢
    • 2020-05-20
    • 2018-11-21
    • 2016-01-12
    • 1970-01-01
    • 1970-01-01
    • 2016-08-23
    • 1970-01-01
    • 2021-03-08
    • 2022-01-18
    相关资源
    最近更新 更多