NoSuchElementException («Невозможно найти элемент: Исследовательский проект», Нет, Нет) при поиске элемента через linkText - PullRequest
0 голосов
/ 06 июля 2018

У меня в настоящее время есть скрипт на python селен, который работает с PhantomJS, но не с Firefox. Я получаю эту ошибку:

NoSuchElementException('Unable to locate element: Research Project', None, None)

В частности, он не работает в этой строке кода:

self.webdriver.find_element_by_link_text("Research Project").click()

Я попробовал несколько разных методов ожидания без удачи, таких как:

WebDriverWait(self.webdriver, 10000).until(EC.presence_of_element_located((By.LINK_TEXT, "Research Project")))

Я также пытался использовать различные Xpath для проверки, не является ли текст ссылки достаточно конкретным, что приводило к исключению ElementNotInteractableException, если ожидание не было реализовано, или к тайм-ауту ожидания, если реализовано.

Если это поможет, мой веб-драйвер PhantomJS определяется как:

args = [
'--ignore-ssl-errors=true',
'--ssl-protocol=any',
'--web-security=false'
]
driver = webdriver.PhantomJS(service_args=args, executable_path='/usr/bin/phantomjs', service_log_path='/tmp/ghostdriver.log')

А мой веб-драйвер Firefox просто определяется как:

driver = webdriver.Firefox(executable_path='/usr/local/Cellar/geckodriver/0.21.0/bin/geckodriver')

Я могу предоставить более подробную информацию, если это необходимо. Любая помощь будет принята с благодарностью.

HTML-код объекта, на который я пытаюсь ссылаться:

<a href="#" id="dynaTempSelView:dynaTempSelForm:tree_selector:newLinksDT:0:close_tree" name="dynaTempSelView:dynaTempSelForm:tree_selector:newLinksDT:0:close_tree" onclick="RichFaces.ajax(&quot;dynaTempSelView:dynaTempSelForm:tree_selector:newLinksDT:0:close_tree&quot;,event,{&quot;parameters&quot;:{&quot;node_id&quot;:5627697,&quot;ajaxRequest&quot;:&quot;true&quot;} ,&quot;incId&quot;:&quot;1&quot;} );return false;" class="publicationTypeLink ariaHasPopup ariaExpanded" onblur="overviewAddnew(null);unselectedDiv(this);" onfocus="overviewAddnew(this);selectedDiv(this);" onmouseout="overviewAddnew(null);unselectedDiv(this);" onmouseover="overviewAddnew(this);selectedDiv(this);" aria-describedby="dynaTempSelView:dynaTempSelForm:tree_selector:newLinksDT:0:hiddenDescriptiontree_closed" aria-haspopup="true" aria-expanded="true"><div id="dynaTempSelView:dynaTempSelForm:tree_selector:newLinksDT:0:closeTree" style="padding-left:20px;" class="unselectedDiv"><img src="/converis/javax.faces.resource/images/collapsible_panel_triangle_state_expanded.png.xhtml?ln=intern" alt=""><span style="padding-left:15px;">Research Project </span></div><span id="dynaTempSelView:dynaTempSelForm:tree_selector:newLinksDT:0:hiddenDescriptiontree_closed" style="display: none;">Research Project</span></a>

1 Ответ

0 голосов
/ 06 июля 2018

Соответствующий HTML-код был бы полезен при выборе стратегии Locator . Тем не менее, в соответствии с вашими испытаниями кода, продвигаясь вперед, когда вы пытаетесь вызвать метод click(), поэтому вместо использования presence_of_element_located() вам нужно использовать element_to_be_clickable() следующим образом:

  • LINK_TEXT:

    WebDriverWait(self.webdriver, 20).until(EC.element_to_be_clickable((By.LINK_TEXT, "Research Project"))).click() 
    
  • PARTIAL_LINK_TEXT

    WebDriverWait(self.webdriver, 20).until(EC.element_to_be_clickable((By.PARTIAL_LINK_TEXT, "Research Project"))).click()
    
  • XPATH

    WebDriverWait(self.webdriver, 20).until(EC.element_to_be_clickable((By.XPATH, "//a[contains(.,'Research Project')]"))).click()
    

Примечание : Вы должны добавить следующий импорт:

from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC
...