【问题标题】:How do I click an li inside a ul using Selenium Webdriver如何使用 Selenium Webdriver 在 ul 中单击 li
【发布时间】:2016-08-31 11:06:07
【问题描述】:

public void testHolidayLink() {

 // login
  driver.findElement(By.id("ctl00_MCPH_MainLogin_UserNameTextBox")).sendKeys("username");
  driver.findElement(By.id("ctl00_MCPH_MainLogin_PasswordTextBox")).sendKeys("password");
  driver.findElement(By.id("ctl00_MCPH_MainLogin_LoginButton")).click();
// click book holiday
  
  driver.findElement(By.xpath(".//*[@id='AddInMyQuickLinks']/div/span/ul/li[1]/h3/a")).click();
}

我正在尝试使用 xpath 在 ul 中单击一个 li,我正在尝试使用它

driver.findElement(By.xpath("//div[@class='indent'/ul/li[1]a")).click();

但它似乎找不到元素

<div class="AddIn  atScreens AddInViewportDESKTOP">
  <div style="width:100%;" data-role="collapsible" class="AddInCollapsible ui-accordion ui-widget ui-helper-reset" id="AddInMyQuickLinks" role="tablist">
    <h2 class="AddinTitleBar ui-accordion-header ui-helper-reset ui-state-default ui-accordion-header-active ui-state-active ui-corner-top ui-accordion-icons" role="tab" id="ui-accordion-AddInMyQuickLinks-header-0" aria-controls="ui-accordion-AddInMyQuickLinks-panel-0"
    aria-selected="true" tabindex="0"><span class="ui-accordion-header-icon ui-icon ui-icon-triangle-1-s"></span>My Quick Links</h2>
    <div class="AddInMain ui-accordion-content ui-helper-reset ui-widget-content ui-corner-bottom ui-accordion-content-active" style="display: block;" id="ui-accordion-AddInMyQuickLinks-panel-0" aria-labelledby="ui-accordion-AddInMyQuickLinks-header-0"
    role="tabpanel" aria-expanded="true" aria-hidden="false">
      <span><ul class="NoIndent"><li class="NoBullet jms-bullet"><h3><a href="javascript:ShowSelectedAddInScreen('-1','32f3c56c-5660-488c-b348-07552ea7d299','0','false',false,'false',true, 'Update Personal Details','e1ff7f13-59fe-4bfc-842d-64a33b0dd98f','b0ab7c0f-bd9d-4f0d-9d1e-508b414ab9ec');"><img alt="Update My Details" src="..\Images\hr.png">Update My Details <span title="Keep your personal information up to date" class="AddInItemDescription">Keep your personal information up to date </span>
      </a>
      </h3>
      </li>
      <li class="NoBullet jms-bullet">
        <h3><a href="javascript:ShowSelectedAddInScreen('-1','8142758e-269a-41f0-b551-433e56dd1225','0','false',false,'false',true, 'Submit a Holiday','e1ff7f13-59fe-4bfc-842d-64a33b0dd98f','4c1ea925-69e5-4950-aeae-18e8493fefd1');"><img alt="Book a Holiday" src="../Style Sheets/images/Holiday114.png">Book a Holiday <span title="Place a request for a holiday" class="AddInItemDescription">Place a request for a holiday </span></a></h3>
      </li>
      <li class="NoBullet jms-bullet">
        <h3><a href="javascript:ShowSelectedAddInScreen('D4292FDC-7213-464C-9C96-019BD67C12DA','bebbb0b6-5328-4737-9709-f389f065db8b','0','false',false,'false',false, 'Employee Mobility','e1ff7f13-59fe-4bfc-842d-64a33b0dd98f','');"><img alt="My Mobility" src="..\Images\hr.png">My Mobility <span title="Places where I would work" class="AddInItemDescription">Places where I would work </span></a></h3>
      </li>
      </ul>
      </span>
    </div>
  </div>
</div>

这是完整的 xpath

/html/body/form[1]/div[3]/div[2]/div[1]/div/span[2]/div/div/div/span/ul/li[2]/h3/a

div 有一个 id,我想我可以用它来到达 span 内的 li,但我不知道怎么做。如果我在第一次发帖时未能正确提供信息,敬请原谅,因此请留下反馈意见,告诉我如何更好地组织我的问题,以使人们更容易理解。

【问题讨论】:

  • 请给你的html文件正确的缩进
  • 如果你给完整的 html 加上适当的缩进会很有帮助

标签: java selenium intellij-idea selenium-webdriver browser-automation


【解决方案1】:

如果要点击第一个链接,意思是

 update My details 

然后使用这个:

driver.findElement(By.cssSelector("li:nth-child(1).NoBullet.jms-bullet> h3>a[href^='javascript:ShowSelectedAddInScreen']")).click();

如果要点击第二个链接,意思是

 Book a Holiday 

然后使用这个:

driver.findElement(By.cssSelector("li:nth-child(2).NoBullet.jms-bullet> h3>a[href^='javascript:ShowSelectedAddInScreen']")).click();

如果你想点击第三个链接,那么使用这个:

driver.findElement(By.cssSelector("li:nth-child(3).NoBullet.jms-bullet> h3>a[href^='javascript:ShowSelectedAddInScreen']")).click();

这可以通过使用下面的代码来简化:

//first create a web element list which contains all elements inside a list:

List<WebElement> elems = driver.findElements(By.cssSelector("ul.NoIndent>li.NoBullet.jms-bullet> h3>a"));

//Now you can select individual elements from a list using:

 elems.get(0).click();//for the 1st element
 elems.get(1).click();//for the 2nd element
 elems.get(2).click();//for the 3rd element

【讨论】:

  • 您好,感谢您的回复。我已经尝试了你的建议,我得到以下 org.openqa.selenium.NoSuchElementException: Unable to find element with css selector == a[href^='javascript:ShowSelectedAddInScreen'] (警告:服务器没有提供任何堆栈跟踪信息)命令持续时间或超时:305毫秒
  • 看起来“javascript:ShowSelectedAddInScreen”在我的 html 中不是唯一的,这可能是这不起作用的原因
  • ok 第一个问题是你想点击那个
  • 是的,这就是我想要点击的内容。 aeae-18e8493fefd1 在两个地方显示,一个是图书的假期链接,然后似乎在另一个页面中再次使用它来提交假期。
  • 所以,请上传 html ...没有这个我们不能给你正确的选择器。
【解决方案2】:

你的 xpath 不正确,试试这个(在提供 html 代码后更新):

driver.findElement(By.xpath(".//*[@id='AddInMyQuickLinks']/div/span/ul/li[1]/h3/a")).click();

【讨论】:

  • 您好,感谢您的回复,但没有奏效。我都试过了,它似乎仍然找不到元素。我想也许它是在页面加载之前查看的,所以我在等待中添加了,但仍然没有工作。
  • 当然这是错误的,您没有提供完整的 html 代码,所以我只修复了您尝试过的内容...根据您更新的答案和 html 代码,xpath 现在应该是答案
  • 也试过了,但没用 - org.openqa.selenium.NoSuchElementException: Unable to find element with xpath == .//*[@id='AddInMyQuickLinks']/ div/span/ul/li[1]/h3/a(警告:服务器未提供任何堆栈跟踪信息)
  • 您还有什么我可以尝试的吗?非常感谢您的帮助
  • 好吧,你的 xpath 显然有问题,尽管我的回答可能不是 100% 正确,但它向前迈出了一步。我建议您为 firebug 获取 firepath 插件 - 然后您只需右键单击按钮,在 firepath 中检查并复制 xpath - 完成。
【解决方案3】:

在某些浏览器中,您可以通过右键单击元素来检查元素,检查元素,当您在“开发者模式”中找到正确的元素时,单击右键单击它。

在复制下->复制 XPath。 为您提供了获取完整路径的正确方法,只需复制粘贴即可。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-12-06
    • 1970-01-01
    • 2016-04-07
    • 2020-08-22
    • 1970-01-01
    • 2012-08-23
    • 2018-09-22
    • 2021-04-03
    相关资源
    最近更新 更多