【问题标题】:Python Selenium Clicking ButtonsPython Selenium 点击按钮
【发布时间】:2018-05-11 07:09:18
【问题描述】:

要求 Selenium 在我的 Web 应用程序中单击选项卡(或按钮)时出现错误。请参阅下面的代码和 CSS 选择器:

错误:selenium.common.exceptions.NoSuchElementException:消息:无法定位元素:#tab-item-1090 > md-icon:nth-child(1)

按钮患者页面按钮的 CSS 选择器:#tab-item-1090 > md-icon:nth-child(1)

脚本代码。它在 'patientPage' 变量处中断。

def createPatient():
    browser = webdriver.Firefox()
    browser.get(confidential)
    emailElem = browser.find_element_by_css_selector('#input_0')
    emailElem.send_keys('bconfidential')
    passElem = browser.find_element_by_css_selector('#input_1')
    passElem.send_keys('confidential')
    loginElem = browser.find_element_by_css_selector('button.md-raised:nth-child(4)').click()
    patientPage = browser.find_element_by_css_selector('#tab-item-1090 > md-icon:nth-child(1)').click()
    patientOptions = browser.find_element_by_css_selector('.md-fab > button:nth-child(1)').click()
    patientOption_Create = browser.find_element_by_css_selector('#menu_container_981 > md-menu-content:nth-child(1) > md-menu-item:nth-child(1) > button:nth-child(1)').click()
    patientCreate_Firstname = browser.find_element_by_css_selector('#input_1072')
    patientCreate_Firstname.send_keys('Test')
    patientCreate_Lastname = browser.find_element_by_css_selector('#input_1073').click()
    patientCreate_Lastname.send_keys('Script')
    patientCreate_SSN = browser.find_element_by_css_selector('#input_1074')
    patientCreate_SSN.send_keys('9812')
    patientCreate_DOB = browser.find_element_by_css_selector('.md-datepicker-triangle-button').click()
    patientCreate_DOB_Month = browser.find_element_by_css_selector('#md-0-year-2015-8-1 > span:nth-child(1)').click()
    patientCreate_DOB_Day = browser.find_element_by_css_selector('#md-0-month-2015-8-16 > span:nth-child(1)').click()
    patientCreate_Submit = browser.find_element_by_css_selector('button.md-raised:nth-child(2)').click()

createPatient()

我不确定为什么找不到这个 CSS 元素,但是可以通过 CSS 选择器找到登录按钮的元素。我已经尝试过使用 Xpath。有人可以帮忙吗?

谢谢, 酒吧

【问题讨论】:

  • 在描述中你说的是#tab-item-1090 > md-icon:nth-child(1),但在代码中你有('#tab-item-1090 > div:nth-child(3)')。是否可以在该按钮中添加一个唯一的 id 以便您不必遍历 Selenium 中的 DOM?编辑:我看不到问题,因为我不知道 DOM,但可能选择器不正确..
  • 嘿 DrNio,我已经编辑了代码。我尝试了这两个选择器都没有运气。什么是 DOM?
  • DOM = "Domain Object Model" 它是从 html 网页构建的节点的结构化树,您的代码正在使用这些选择器遍历这些节点。
  • 简单 DOM 示例 <html> <body> <p class="content">Site content goes here.</p> </body> <html> 这是在 Selinium 中定位按钮的方式 content = driver.find_element_by_css_selector('p.content')

标签: jquery python html css selenium


【解决方案1】:

我认为错误消息很清楚Message: Unable to locate element: #tab-item-1090 > md-icon:nth-child(1)。因此,基本上当测试运行时,选择器不正确,并且在您的 Web 应用程序中找不到该元素。我建议在您的 Web 应用程序的该元素(按钮或选项卡)上添加一个唯一的 id,例如 <button id='foo'>click me </button>,并将 #tab-item-1090 > md-icon:nth-child(1) 替换为 foo

编辑:要获得更多关于#tab-item-1090 > md-icon:nth-child(1) 无法正常工作的帮助,我们需要查看网络应用的 DOM。

【讨论】:

  • 谢谢,非常感谢。我正在与我的网络开发人员一起努力解决这个问题。
  • 酷!所以最后你只需要做这样的事情patientPage = browser.find_element_by_css_selector('#patient-page').click() 更简单,更清洁,更容易在未来维护:)
【解决方案2】:

查看您的脚本,我建议您需要包含对 WebDriverWait until 方法的调用。该脚本单击登录页面上的按钮,然后立即尝试单击该患者按钮。您应该等待患者按钮可点击,然后搜索它以点击它。

【讨论】:

    猜你喜欢
    • 2014-02-16
    • 2016-05-08
    • 2021-09-14
    • 1970-01-01
    • 2021-11-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多