щелчок не работает в селене из-за наличия всплывающей подсказки в веб-браузере. Как заставить клик работать или скрыть подсказки, чтобы он работал - PullRequest
0 голосов
/ 14 апреля 2020

Я делаю проект автоматизации для своей организации. Я использую Firefox веб-браузер для этой цели. Код работает нормально, но застрял в одной точке между программами. Проблема связана с нажатием на веб-элемент. With selenium code 1.I have to first click on complete task 2. After clicking on complete task submit option appears on webpage and I have to click on submit button as shown in image. Here is image when I click on complete task

Как видно на этом рисунке, когда я нажимаю на завершенное задание, оно показывает информацию о полном элементе задания. Далее я должен нажать на кнопку «Отправить», но из-за этой подсказки программа не может нажать на элемент «Отправить». Here is the image of submit

Ниже следует Html из Complete task элемента

image

Ниже следует html элемента отправки

<td class="completeTaskDropdown"><nobr>submit</nobr></td>
<nobr>submit</nobr>

При отладке программы, программа показывает, что она нажала на завершенную задачу и кнопку отправки, но на самом деле в веб-браузере она не нажала ни на одну из них. Я испробовал все возможные способы решения этой проблемы, но не смог получить правильный ответ. Ниже приведен краткий фрагмент кода для вышеуказанной задачи

firefoxProfile = webdriver.FirefoxProfile()
firefoxProfile.set_preference("plugin.state.flash", 2)
firefoxProfile.update_preferences()
driver = webdriver.Firefox(firefoxProfile, executable_path=r'drivers\geckodriver.exe')
actions = ActionChains(driver)
complete_task = wait.until(EC.element_to_be_clickable((By.XPATH, "//img[@name='WFCompleteTask']")))
driver.execute_script("return arguments[0].scrollIntoView(true);", complete_task)
driver.execute_script("arguments[0].click();", complete_task)
submit = wait.until(EC.element_to_be_clickable((By.XPATH, "//nobr[contains(text(),'submit')]")))
driver.execute_script("arguments[0].click();", submit)

Я также пробовал Actionchains и ручной щелчок также -

ActionChains(driver).move_to_element(submit).click(submit).perform()

Также пробовал

complete_task.click()
submit.click()

Но, к сожалению, ни один метод не работает для нажатия кнопки complete_task и после этого кнопки отправки. При переполнении стека я нашел код jquery, но он также не работает для сокрытия или удаления подсказок. Ниже приведен код

driver.execute_script("""
                    unction hideTips(event) {  
    var saveAlt = $(this).attr('alt');
    var saveTitle = $(this).attr('title');
    if (event.type == 'mouseenter') {
        $(this).attr('title','');
        $(this).attr('alt','');
    } else {
        if (event.type == 'mouseleave'){
            $(this).attr('alt',saveAlt);
            $(this).attr('title',saveTitle);
        }
   }
}

$(document).ready(function(){
 $("a").live("hover", hideTips);
});      """)

Но приведенный выше код не работает. Пробовал мой код в браузере Inte rnet Explorer, но такая же проблема возникает и в Inte rnet Explorer. Как скрыть эти всплывающие подсказки с веб-страницы или если скрыть всплывающие подсказки невозможно, чем получить щелчок по завершенной задаче и кнопке отправки с помощью сценария автоматизации.

Примечание. На прошлой неделе этот проект и нажатие работали нормально. но из-за изменения кода с помощью пользовательского интерфейса (добавление всплывающих подсказок на веб-страницу командой этого инструмента) этот щелчок не выполняется

Ответы [ 3 ]

0 голосов
/ 16 апреля 2020

Недавно я устранял подобную проблему. Текст всплывающих подсказок не исчезает после щелчка по первому элементу, поэтому при последующем щелчке по другому элементу происходит сбой (так как элемент заблокирован всплывающими подсказками, как в вашем случае). Эта проблема возникает только на Firefox, но не Chrome.

Я не понял, почему текст всплывающих подсказок остается в пользовательском интерфейсе после щелчка. Обходной путь, который я нашел, состоит в том, чтобы использовать щелчок класса Actions вместо click () Webdriver для первого элемента, который не будет отображать всплывающие подсказки и, следовательно, не блокирует второй щелчок.

0 голосов
/ 16 апреля 2020

Попробуйте, если это работает:

javaScriptExecutor.executeScript("arguments[0].submit()", webElement);

или попробуйте отправить ключи событие.

0 голосов
/ 14 апреля 2020

Попробуйте:

submit = wait.until(EC.element_to_be_clickable((By.XPATH, "//nobr[contains(.,'submit')]")))
ActionChains(drivers).move_to_element(submit).click().perform()

или

submit = wait.until(EC.element_to_be_clickable((By.XPATH, "//nobr[contains(.,'submit')]")))
driver.execute_script("arguments[0].click();", submit)

Примечание: , пожалуйста, добавьте ниже импорта в ваше решение

from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.common.action_chains import ActionChains
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...