Selenium webdriver не находит элемент Inbox - PullRequest
0 голосов
/ 03 октября 2018

Подбирая это два месяца назад, так как я не нашел решения.Я использую драйвер Firefox, чтобы найти и затем нажать на гиперссылку с именем «Входящие», но после исчерпывающих попыток Selenium все еще не может найти элемент.Буду признателен за любую помощь, так как я искренне не смог найти причину, по которой веб-драйвер Selenium не может найти этот элемент.

В приведенном ниже HTML-коде я рассмотрел, что может быть кадр, но ни один не может быть найден; если кто-то может подтвердить, что в приведенном ниже коде фактически нет iframe, который был бы признателен! У меня также уже есть time.sleep(40) в моем скрипте, чтобы у веб-драйвера было достаточно времени для поиска элемента.Поэтому у меня заканчиваются идеи, но я подумал, что, может быть, элемент #text ("") прямо перед элементом гиперссылки "inbox" может вызывать проблему, скрывая элемент "inbox"?Любые советы о том, как поступить, будут оценены;все мои попытки разрешения перечислены ниже.

Ниже приведен мой код, пока не возникнет проблема с этим элементом (URL был удален, поскольку он является частным):

from selenium import webdriver
import time

driver = webdriver.Firefox()
driver.get("[URL REMOVED]")
time.sleep(2)
elem1 = driver.find_element_by_css_selector('#main-content > div > div.col-md-4.radix-layouts-sidebar.sidebar-right.panel-panel.sidebar > div > div.panel-pane.pane-entity-field.pane-it-service-field-related-services.block > div > div > ul > li:nth-child(1) > a')
elem1.click()
#Logging in
time.sleep(40)
#Now in the System, click on Inbox Button
elem2 = driver.find_element_by_??? # Trying to figure out this code to find inbox element
elem2.click()

Я пробовалниже при попытке найти элемент:

find_element_by_xpath('//td[@class=’MENUCHOICE’]//a[@href="main.do?action=inbox"]')
find_element_by_xpath('/html/body/table/tbody/tr[6]/td/a')
find_element_by_link_text('Inbox')
find_element_by_partial_link_text('Inb')
find_element_by_css_selector('body > table > tbody > tr:nth-child(6) > td > a')
find_element_by_css_selector("td.MENUCHOICE a[href='main.do?action=inbox']")

Все локаторы, которые я пытался поднять, поднимают 'selenium.common.exceptions.NoSuchElementException: Сообщение: нет такого элемента: Невозможно найти элемент'

Я не могу предоставить ссылку на страницу, поскольку она является собственностью, но ниже я предоставил HTML-код страницы на случай, если кто-то может помочь (Интересующий элемент находится ниже второго до последнего класса MENUCHOICE: Входящие):

 <html>
   <!--702.15-->
   <head>
      <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
      <meta http-equiv="Cache-Control" content="no-cache">
      <meta http-equiv="Expires" content="0">
      <meta http-equiv="Pragma" content="no-cache">
      <title>UDM - Notification System</title>
      <style type="text/css">
         td.MENU1 {
         FONT-FAMILY: Verdana, Arial, Helvetica, sans-serif;
         FONT-SIZE: 18pt;
         FONT-WEIGHT: medium;
         color: navy;
         }
         td.MENU2 {
         FONT-FAMILY: Verdana, Arial, Helvetica, sans-serif;
         FONT-SIZE: 15pt;
         FONT-WEIGHT: medium;
         color: navy;
         }
         td.MENUCHOICE {
         FONT-FAMILY: Verdana, Arial, Helvetica, sans-serif;
         FONT-SIZE: 14pt;
         FONT-WEIGHT: medium;
         color: blue;
         }
      </style>
   </head>
   <body bgcolor="#ffffff" background="payadm/images/background.gif">
      <table width="750" border="0">
      <tbody>
         <tr>
            <td><img height="55" width="129" src="payadm/images/udm_cw100.gif"></td>
         </tr>
         <tr>
            <td>&nbsp;<img src="payadm/images/footerline.gif"></td>
         </tr>
         <tr>
            <td class="MENU1">&nbsp;&nbsp;AN Main Menu</td>
         </tr>
         <tr>
            <td> &nbsp;</td>
         </tr>
         <tr>
            <td class="MENUCHOICE">&nbsp;&nbsp;&nbsp;Notification Functions:</td>
         </tr>
         <tr>
            <td class="MENUCHOICE">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
               <a href="main.do?action=inbox">Inbox</a>
            </td>
         </tr>
         <tr>
            <td class="MENUCHOICE">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
               <a href="main.do?action=notificationSel">Notification Selection</a>        
            </td>
         </tr>

Спасибо за помощь.

Ответы [ 2 ]

0 голосов
/ 22 февраля 2019

Эта проблема была решена месяц назад.Оказывается, что для этого конкретного веб-приложения веб-драйверу Selenium требовалась прямая ссылка с самого начала;в противном случае он не "узнает" страницу, на которой он находился.Это веб-приложение обычно не связано напрямую;Обычно вы переходите на страницу-посредник, на которой размещена ссылка.

Я решил эту проблему, направив Selenium непосредственно в веб-приложение, вместо того, чтобы сначала перейти на страницу-посредник и щелкнуть ссылку веб-приложения.Т.е.:

    from selenium import webdriver
    import time

    driver = webdriver.Firefox()
    driver.get("[DIRECT LINK INSTEAD OF INTERMEDIARY PAGE LINK]")

Надеюсь, что это поможет любому с подобной проблемой в будущем.

0 голосов
/ 03 октября 2018

Чтобы щелкнуть элемент с текстом как Входящие , можно использовать одно из следующих решений:

  • css_selector:

    find_element_by_css_selector("td.MENUCHOICE a[href='main.do?action=inbox']")
    
  • xpath:

    find_element_by_xpath("//td[@class='MENUCHOICE']//a[@href='main.do?action=inbox' and contains(.,'Inbox')]")
    
...