** Как выбрать указанное количество тегов IMG из значения ввода количества ** - PullRequest
0 голосов
/ 17 февраля 2020

Пример изображения:

enter image description here

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

<div id="surface" style="width: 4567px; height: 4137px; left: -1850px; top: -1152px; cursor: default;">


<img src="https://media.memories.png" data-items="L:106|EE:5" data-pl="1" style="position: absolute; cursor: pointer; width: 14px; height: 14px; left: 2221px; top: 1561px; display: block;">


<img src="https://media.memories.png" data-items="L:106|EE:6" data-pl="1" style="position: absolute; cursor: pointer; width: 14px; height: 14px; left: 2237px; top: 1561px; display: block;">


<img src="https://media.memories.png" data-items="L:106|EE:7" data-pl="1" style="position: absolute; cursor: pointer; width: 14px; height: 14px; left: 2253px; top: 1561px; display: block;">


<img src="https://media.memories.png" data-items="L:106|EE:8" data-pl="1" style="position: absolute; cursor: pointer; width: 14px; height: 14px; left: 2269px; top: 1561px; display: block;">


</div>

Я выяснил, как выбрать один из вышеуказанных тегов img по указанной строке и номеру элемента. используя следующий xpath, но как выбрать три элемента в строке «EE» после выбора номера 3 из раскрывающегося меню?

Xpath=//img[@data-items = ' L:106|EE:8'] 

Пример раскрывающегося меню:

<!DOCTYPE html>
<html>
<head>
<meta name="viewport" content="width=device-width, initial-scale=1">
<style>
.dropbtn {
  background-color: #4CAF50;
  color: white;
  padding: 16px;
  font-size: 16px;
  border: none;
}

.dropdown {
  position: relative;
  display: inline-block;
}

.dropdown-content {
  display: none;
  position: absolute;
  background-color: #f1f1f1;
  min-width: 160px;
  box-shadow: 0px 8px 16px 0px rgba(0,0,0,0.2);
  z-index: 1;
}

.dropdown-content a {
  color: black;
  padding: 12px 16px;
  text-decoration: none;
  display: block;
}

.dropdown-content a:hover {background-color: #ddd;}

.dropdown:hover .dropdown-content {display: block;}

.dropdown:hover .dropbtn {background-color: #3e8e41;}
</style>
</head>
<body>

<h2>Select Quantity</h2>
<p>Move the mouse over the button to open the dropdown menu.</p>

<div class="dropdown">
  <button class="dropbtn">Item Count</button>
  <div class="dropdown-content">
    <a href="#"> 1</a>
    <a href="#"> 2</a>
    <a href="#"> 3</a>
  </div>
</div>

</body>
</html>

Ответы [ 2 ]

0 голосов
/ 18 февраля 2020

Вы можете сделать list всех изображений, а затем повторить только 3 изображения, используя sublist. Пожалуйста, ознакомьтесь с кодом ниже.

WebDriverWait wait = new WebDriverWait(driver, 40);
List<WebElement> allImages = driver.findElements(By.cssSelector("div#surface > img"));
for (WebElement image : allImages.subList(1, allImages.size())) 
    wait.until(ExpectedConditions.elementToBeClickable(image));
    image.click();
0 голосов
/ 17 февраля 2020

Если вы хотите выбрать 3 из раскрывающегося списка, вы можете использовать ниже xpath.

//div[@class='dropdown-content']/a[normalize-space(.)='3']

Вы можете нажать на //button[.='Item Count'], а затем использовать xpath, чтобы выбрать 3 .

В качестве альтернативы, вы можете использовать js для выбора 3 без нажатия кнопки.

WebElement element = driver.findElement(By.xpath("//div[@class='dropdown-content']/a[normalize-space(.)='3']"));
JavascriptExecutor js = (JavascriptExecutor) driver;  
js.executeScript("arguments[0].click();",element);
...