#python #html #selenium #selenium-webdriver #xpath
Вопрос:
Я работаю в рамках программы веб-тестирования:
WebDriverWait(browser, 7).until(EC.element_to_be_clickable((By.XPATH, "*[@id="additionalTools"]/ul/li[3]/a""))).click()
и это не нахождение элемента. Все мои действия на сайте отлично работают с XPath.
HTML-код сайта является:
<div xmlns: actutil = "xalan://mataf.portal.utils.UserAccountUtil" xmlns: wsgut = "xalan://mataf.portal.utils.GeneralUtils" xmlns: wsnls = "xalan://mataf.portal.utils.MatafEnvUtil" xmlns: wspuma = "xalan://mataf.portal.utils.PumaServices" xmlns: wsportal = "xalan://mataf.portal.utils.GeneratePortalLink" id = "T05CHEAD_global" >
<div id = "PRIMARY-TITLE" class = "heading plus" >
<h1 aria-hidden = "true" role = "document" aria-label = "על מנת להפוך את האתר לנגיש לקורא מסך לחץ alt 1. על מנת להפסיק הודעה זאת לחץ alt 2." >
<span id = "tabTitle" style = "float: right;" dir = "ltr" > תיק מט"ח < /span >
</h1 >
<div id = "additionalTools" class = "tools" >
<ul class = "fll" >
<li class = "first" >
<a id = "personalNavigationFavorite" class = "favorite" title = "הוסף למועדפים" href = "javascript:matafTools.processFavorite();" aria-label = "על מנת להפוך את האתר לנגיש לקורא מסך לחץ alt 1. על מנת להפסיק הודעה זאת לחץ alt 2." > </a >
</li >
<li class = "li-calc" >
<a href = "javascript:matafTools.openCalc();" class = "calc" title = "מחשבון" aria-label = "על מנת להפוך את האתר לנגיש לקורא מסך לחץ alt 1. על מנת להפסיק הודעה זאת לחץ alt 2." > </a >
</li >
<li class = "li-save" >
<a class = "save" title = "שמירה" href = "javascript:matafTools.processSaveAs('031','html','', 'true');" aria-label = "על מנת להפוך את האתר לנגיש לקורא מסך לחץ alt 1. על מנת להפסיק הודעה זאת לחץ alt 2." > </a >
Как я могу найти и click
сохранить кнопку? Поиск по class
, full XPath
и name
не работает.
Комментарии:
1. На какой тег вы хотите нажать ?
Ответ №1:
Вы используете неправильное выражение XPath.
Попробуйте это:
WebDriverWait(browser, 7).until(EC.element_to_be_clickable((By.XPATH, "//div[@id='additionalTools']/ul/li[3]/a"))).click()
Или даже это:
WebDriverWait(browser, 7).until(EC.element_to_be_clickable((By.XPATH, "//a[@class='save']"))).click()
Комментарии:
1. Спасибо, это работает. Почему мне нужен div вместо * поймать все?
2. Вы можете использовать
*
и там, но все равно ваш синтаксис был неправильным. Это может быть"//*[@id='additionalTools']/ul/li[3]/a"
3. Спасибо. Мне не хватало динамического корня с //?
4. ДА. Также избыточно
"
в конце
Ответ №2:
Вы поступаете неправильно в ожидании элемента, правильный синтаксис для явного ожидания в python таков :
element = WebDriverWait(driver,7).until(EC.presence_of_element_located((By.XPATH, "xpath")))
Теперь вы можете сделать:
element.click()
Для вашего случая:
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
element = WebDriverWait(driver,7).until(EC.element_to_be_clickable((By.XPATH, "myXpath")))
element.click();