Щелкните определенный элемент на карте изображения с помощью веб-драйвера Selenium 3

Я использую Selenium 3.3.1 и привязки Java Webdriver, и мне нужно щелкнуть определенный элемент на карте изображения на странице. Вот HTML для карты изображения

<img id="menu1" name="menu1" src="../../images/images/menu23t.gif" width="950" height="68" border="0" usemap="#Map">

<map name="Map">
    <area id="manager_indx" shape="rect" coords="220,13,297,60" href="../../backend/manager/index.php" target="_parent">
    <area id="pos" shape="rect" coords="306,13,336,60" href="http://10.10.10.99:8080/frontend/index.html" target="_parent">
    <area id="end_of_day" shape="rect" coords="347,13,410,60" href="../../backend/manager/end_of_day.php" target="_parent">
    <area id="customer" shape="rect" coords="415,10,470,60" href="../../backend/managecustomers/index.php" target="_parent">
    <area id="employee" shape="rect" coords="477,12,537,60" href="../../backend/employee_f/index.php" target="_parent">
    <area id="reports" shape="rect" coords="540,12,590,61" href="#" onclick="chk_report_security()">
    <area id="cash" shape="rect" coords="596,13,640,60" href="../../backend/manage_register/index.php" target="_parent">
    <area id="inventory" shape="rect" coords="650,12,705,60" href="../../backend/inventory/index.php" target="_parent">
    <area id="configuration" shape="rect" coords="720,11,802,60" href="../../backend/generalsetup/configuration.php" target="_parent">
    <area id="logon" shape="rect" coords="815,11,848,60" href="http://10.10.10.99:8080/frontend/index.html" target="_parent">
    <area id="exit" shape="rect" coords="852,11,890,61" href="javascript:javascript:exit_logout();">
    <area id="help" shape="rect" coords="892,14,937,60" href="javascript:top.banner.openContainer(window.parent.banner.isThrive);" target="_parent">
</map>

И вот то, что я пытался заставить его щелкнуть область с идентификатором «отчеты».

WebElement banner = driver.findElement(By.cssSelector("map"));
WebElement area = banner.findElement(By.id("reports"));
area.click();//This click isn't working

Я также пробовал использовать ID, cssSelector и xpath.

driver.findElement(By.id("reports")).click();

driver.findElement(By.cssSelector("#reports")).click();

driver.findElement(By.xpath("//*[@id=\"reports\"]")).click();

И другие варианты xpath, такие как //area[@id='reports'].

В основном я использую Firefox и Geckodriver 0.15.0, но это происходит и в других браузерах. Для этого в 2011 году была обнаружена ошибка. , но это было определено только для хрома, и к настоящему времени эта ветка настолько устарела, что практически бесполезна. Если кто-то сделал это недавно, было бы очень полезно, если бы они могли поделиться, как они это сделали. Спасибо!


person Wingdom    schedule 28.06.2017    source источник
comment
Один из возможных вариантов - использовать клик по координатам. Используя класс Actions, перейдите к некоторым координатам/элементу и сделайте щелчок   -  person Ivan Pronin    schedule 28.06.2017
comment
Это тоже не работает, и я думаю, это потому, что мышь перемещается где-то на карте изображения, но на самом деле не по ссылке, которую мне нужно щелкнуть. Это проще показать на снимке экрана, но если вы используете инспектор html браузера, чтобы просмотреть код и навести курсор на любой из тегов ‹area›, будет выделена вся карта изображения, и она не сможет определить разницу между различными областями. на карте.   -  person Wingdom    schedule 29.06.2017
comment
попробуй с исполнителем javascript   -  person Murthi    schedule 29.06.2017
comment
javascript executor, кажется, сделал это, спасибо.   -  person Wingdom    schedule 29.06.2017


Ответы (1)


Отвечая на мой собственный вопрос, потому что ответ пришел из предложения в комментариях. Использование исполнителя javascript было ответом. Что-то типа:

WebElement banner = driver.findElement(By.cssSelector("map"));
WebElement area = banner.findElement(By.id("reports"));

JavascriptExecutor executor = (JavascriptExecutor)driver;
executor.executeScript("arguments[0].click();", area);
person Wingdom    schedule 29.06.2017